找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 60|回复: 0
打印 上一主题 下一主题

C语言经典算法16-26

[复制链接]

114

主题

136

帖子

1000

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1000
跳转到指定楼层
1#
发表于 2017-10-6 14:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
【程序166 {5 r( M8 w" V% t" T4 f
题目:输入两个正整数mn,求其最大公约数和最小公倍数。 ' G. B; x3 V* x" N. |+ I' [" p8 a' j; a
6 ]; |  X1 m9 d6 I1 x) \6 ]

3 {9 v, J) x3 R2 a+ W& R' M: s6 g- T+ C% j
作者: zhlei81 2005-1-22 11:30 回复此发言 " |1 {% a8 R& y

' q$ e: t8 w: y--------------------------------------------------------------------------------
0 P+ t- S! u% F6 {. b: d& R# _! j
/ A- ^5 N" ?3 m* N, o4 回复:经典C源程序1008 T6 L- F" i- n9 q7 z
1.程序分析:利用辗除法。 7 @% r) u' l4 s9 j' p

; R" ~4 Z9 D1 g% |1 h& X; m/ V2.程序源代码: 1 x$ m6 S1 G' a0 b+ B( ?- C9 k  R1 `! o
main() ' s. t" y. z# S% H$ }. [
{ / d( a+ A4 \. r: X
int a,b,num1,num2,temp; 8 Q+ F2 H1 h* W
printf("please input two numbers:\n");
* c8 H# |6 f) t6 O$ dscanf("%d,%d",&num1,&num2); $ _. `/ a* t' S9 r2 ^/ b* v
if(num1 { temp=num1;
" t; x# U. ?: fnum1=num2; , [1 P9 J) e4 a9 z! V4 V) X6 p' G+ ~
num2=temp; ) ~7 f' ]2 N1 g" s$ @- e
} " o' d' P5 G: S
a=num1;b=num2;   c) O/ Z3 J( n/ @
while(b!=0)/*利用辗除法,直到b0为止*/ * g( q- l9 P! B$ k0 F# u
{
7 i- M* K8 C4 `7 h9 i! rtemp=a%b;
8 p  _8 c  n: `  M7 [/ [5 l+ |a=b; 1 l9 l1 P% ]! o9 l
b=temp; & {! y, s* [  q9 _4 i
} 6 Q3 _1 T4 e; c- v4 r9 I
printf("gongyueshu:%d\n",a); , s. n8 W! n' D) J+ [
printf("gongbeishu:%d\n",num1*num2/a); + w2 V; ]% j6 o1 a7 a* H$ n
}
- N4 u9 F8 I# i- A( ~5 t============================================================== 7 L6 `7 s9 {0 r
【程序17" i1 Z4 z9 s& Y8 w( S+ f$ }" l
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
+ e( ^5 V* b! l( U5 N% E1 o1.程序分析:利用while语句,条件为输入的字符不为'\n'.
9 }$ }3 U" v/ @2 W; i. s5 X" X- _, Y' f- E  ?' W0 S
2.程序源代码: , y  |6 ?# x( v
#include "stdio.h"
5 S+ P  w2 ?( Q% E' B) y/ \main()
: o/ Q' K& l' [1 o4 @7 t{char c;
+ c/ z0 }) P/ R1 q/ a$ v# Fint letters=0,space=0,digit=0,others=0;
$ ^$ e  G" K: r9 K8 d0 sprintf("please input some characters\n"); 5 x: I/ W4 z3 ~; u. Z4 J) w" a
while((c=getchar())!='\n')
) @+ L4 C) z  P. ]7 Z, W- Z5 y% d2 X{
7 V" ~8 X/ ]0 b9 g8 a# Oif(c>='a'&&c<='z'||c>='A'&&c<='Z')
9 W/ Z2 i  ]% x" V0 c  rletters++;
/ c8 c; z$ \* @else if(c==' ') 1 [" J7 d% G5 x& s9 x" D
space++;
4 q2 I* N" B% m* F( Helse if(c>='0'&&c<='9')
5 E; T- {6 g. v5 ^% x5 j" t0 n) L5 M  |digit++; : t0 Z( ]8 R6 P4 }% t( J3 J
else
% l) {) Q" K5 H1 D# [( yothers++;
6 R/ o' w, `; \# u- w' e' ~}
; X, B+ k. e* ?. U" e/ x2 Pprintf("all in all:char=%d space=%d digit=%d others=%d\n",letters, 7 \6 w, b7 k- o( }: w7 @; j
space,digit,others);
. ~. a6 _! g0 E/ H2 ?5 [}
1 P9 M4 P1 j# n, i% K==============================================================
, l, F2 s  B9 w% L( \0 D' j  V. {6 F5 a【程序18, V$ {& [9 b7 z4 s3 S
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 . \, `% S" O4 |4 h: @
共有5个数相加),几个数相加有键盘控制。
/ c8 [. \  C" k  t5 [. j/ T9 c- D1.程序分析:关键是计算出每一项的值。
# l% n5 D! F9 f) {: x, \2.程序源代码: & x  z# k) j0 u, o  B* M1 m' J; B
main() + ~# f( b* Q9 Q6 W  O' _; M; Z
{ 2 b% L/ ], b" p: w* `
int a,n,count=1; 6 ]6 ^$ ]% m/ p
long int sn=0,tn=0;
) L9 Q) E% M$ l$ M+ L. T6 _; Z; g8 Jprintf("please input a and n\n"); 4 J% Y2 s* x4 U+ Y& K
scanf("%d,%d",&a,&n);
, ~1 C$ j( J& B+ ?" E; D+ Rprintf("a=%d,n=%d\n",a,n);
- ]) V  ~; h2 _* S/ L! ?4 Nwhile(count<=n)
* H. L* u0 H" `3 G{
( L* }: k( p% ]# X4 m: [  ftn=tn+a;
% C/ `7 S) a# x! q* M; Ssn=sn+tn;
0 U3 [) ~4 o. F( ?3 ra=a*10;
3 a) o0 A; B: H& b6 [9 n! e& K++count; ! \' D9 n1 R- @
} 5 |- Z) w6 h$ X+ R% O
printf("a+aa+...=%ld\n",sn); % k2 I- l+ n: }5 d! R' p0 `4 s
}
- K. t5 e- a4 z( q============================================================== 7 O4 A1 d  q5 |6 L/ I) l; @
【程序19, \) B3 L4 y/ u9 t
题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程 7 X6 n, P" n  Z. O( K3 K
找出1000以内的所有完数。
5 E) X+ N; d8 L9 s2 T: E1. 程序分析:请参照程序<--上页程序14.
; O/ H, f* {# I4 I  ?8 M/ p7 I2.程序源代码: 8 @$ h8 k/ W- N
main()
# f3 n: |+ F3 V{ $ R) F$ |1 I* r% ?0 v
static int k[10];
4 g3 X* p! n: cint i,j,n,s;
9 @5 ~6 L- ^- O2 f) N+ \for(j=2;j<1000;j++)
4 H0 P; m' ?' X9 H/ Z{
' a% l; u7 R4 N4 O8 i- ^/ c) Ln=-1;   h, u  t" w1 I5 [/ p8 [
s=j;
, s) S) C! b5 o0 T4 sfor(i=1;i { " _  p/ U1 |2 e4 N" s8 A. O) ^
if((j%i)==0) . N: R1 O3 t* n
{ n++;
0 P4 J0 k& `9 h8 a7 a' t4 e) x% us=s-i; 0 p$ H& P6 d& |. T+ N( \# E
k[n]=i; # d. u% I7 z& E7 {/ [
} 2 v/ R! [9 ]5 I5 ?8 f. @! t
} . T7 \$ R6 z, v" P
if(s==0)
! V; `! ]/ A! D# G  A: `{ + w0 F& C" d' {; ~$ |
printf("%d is a wanshu",j);
4 C* A8 j9 |5 l- ]( O7 X7 l1 G* mfor(i=0;i printf("%d,",k);
  U& ~1 T% A/ J4 n0 W- Aprintf("%d\n",k[n]);
5 W2 K& [. E$ V- q9 S1 u4 w}
2 n! _8 U. L* w7 N6 J3 x}
) j) D% j( ?/ F) p( J}
* Q$ b( u% A# `/ r$ `0 M============================================================== 3 T) I2 n2 Q/ S" s7 E
【程序20
% d2 p% k; k- R- W, s1 `0 Q题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
5 w9 K/ P1 r  U: o- ^2 N) |) r# @& y10次落地时,共经过多少米?第10次反弹多高?
; x" E8 Z, K9 W' w: n" ^, J1.程序分析:见下面注释
4 y" l9 c6 Q/ H: R3 s2.程序源代码: 1 o# `0 p$ X+ ]8 V: R: ?
main()
; n2 u3 f; u9 M  R/ O* w) C& _{ 4 n: C9 s, F, e$ Y1 e3 N8 ?- ~
float sn=100.0,hn=sn/2; # Z- u* |0 }4 n9 i; Q
int n;
8 Y. R% {+ x1 E' l( Ffor(n=2;n<=10;n++)   v% b5 U2 {/ K8 t* s4 q. H# W
{
7 ~8 R7 w7 P7 d" ^: B5 @' l1 Y, h/ |5 vsn=sn+2*hn;/*n次落地时共经过的米数*/ 9 N- _& s. C7 `' P8 K
hn=hn/2; /*n次反跳高度*/
8 E3 v0 j, T% d! W4 Y}
, @. [% T* i7 s$ Y/ a, P; sprintf("the total of road is %f\n",sn);
0 x4 i) F( Z; kprintf("the tenth is %f meter\n",hn);
0 e! A( M! T/ O}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个/ s' F% z( _# F6 G
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
" [0 v6 H' e5 s  ~" \   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
$ l, s2 `: w( y1.程序分析:采取逆向思维的方法,从后往前推断。
6 M; n( Z7 o; ]  S5 l2.程序源代码:; ^5 h1 k1 p& g! V9 v$ f
main()4 L8 i5 v0 D$ p+ F
{
2 G: y+ n" f+ s  r. p! fint day,x1,x2;
3 V% f$ h1 q0 f9 e. s4 |& jday=9;
, I" U3 d3 C. V/ sx2=1;
1 H8 C) X/ D, b, c% Jwhile(day>0)
' ~1 T4 j- z9 G% h+ _$ \  r {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/
0 o# V$ x" z! Y  I6 R* L+ q2 _ x2=x1;
& r' Y5 r( U5 o: k! ^1 j day--;0 {* C+ N; o; ]. j) t
 }$ A0 Y/ R; u: }2 q6 n
printf("the total is %d\n",x1);
; K$ e# k% x- A8 ]- x, b3 h}! o) V7 e( p1 t" H6 h3 A
==============================================================% y7 F: A+ t% L
【程序22" X, Z3 I! c2 x/ \
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定! M  K* Y/ ~0 z3 ?, d  K
   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
1 S- ]/ Q: [* `  e   三队赛手的名单。
/ G0 A: }8 A& y3 c2 P1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,' t+ S) v' _0 z7 N8 i
      则表明此数不是素数,反之是素数。       
% _7 x" @# H. [2.程序源代码:
, ]4 n" E7 g* @. e. D3 w# tmain()
( g& m7 z) C8 w5 D{
* v  e7 L% j6 k. k+ D) ~char i,j,k;/*ia的对手,jb的对手,kc的对手*/
, B6 l: e6 e; p2 l: Zfor(i='x';i<='z';i++); z* a& d" l- Z
 for(j='x';j<='z';j++)
* j% P! y  M2 l. k. N  I- o/ r9 @ {; q, _9 d9 {0 l) I
 if(i!=j)
1 \% W/ l# Z4 B% P3 N! b  for(k='x';k<='z';k++)
! `# X. f- t' i. G  { if(i!=k&&j!=k)
7 W" O& o- k& a) K( r1 o. O   { if(i!='x'&&k!='x'&&k!='z')
& s0 s! B3 H7 `9 F* i- S$ d0 s   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);% b$ t* R  X4 ^6 d. ]
   }: t$ A1 T3 H8 I! {' g, ?7 [% v
  }0 ~9 H; i( u" Q0 ~7 r! Z8 l4 s' }
 }
1 F5 _3 r5 d8 I" [3 o7 F5 E}$ [' J& a! O$ ]. H7 B  F4 S
==============================================================4 Z* u* \4 l) \& o5 t! b6 K- `
【程序23
& t9 }; o& l6 J3 C+ ]& q; Y题目:打印出如下图案(菱形)
*
7 U1 B* d0 h0 u***
, k' h. N8 L( j9 Z1 V' W******
0 {! m' |6 Q( k********
) U" n: Z. Z$ ?: I******( k" o( W& u+ H7 D) f4 o$ O
***
% H" I; q7 f! s  }4 x- _*
+ U* U& R( B6 j7 Q4 c$ G% C% z3 P1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重9 q4 ~5 f7 T. G1 W
      for循环,第一层控制行,第二层控制列。
2 ^  `: M% P4 l# ], T2.程序源代码:
# @* Q: n  h  X, Y2 L/ Tmain()5 T: i  X( Z  C) T$ X
{
2 G5 I, ~" z$ Q) I, sint i,j,k;
3 y4 _( s- U4 c  `( Q+ \; @for(i=0;i<=3;i++)
0 b" Y' j* }0 [ {1 E/ T" g* {; U/ H
 for(j=0;j<=2-i;j++)" C$ B% B& Q# V
  printf(" ");
5 j+ L, \- A+ P for(k=0;k<=2*i;k++)( T9 G$ V* \  _: D9 b4 h
  printf("*");
, ~; M1 g( x3 _3 x printf("\n");
+ G2 B/ S$ c' G2 W% T- e: I }( Z$ w) G2 t) \* e
for(i=0;i<=2;i++)8 a5 m0 R: u/ q
 {
9 x0 \% u- @* M  j5 N3 y for(j=0;j<=i;j++)" E& r% H3 b, ^* b, s
  printf(" ");
6 o* A4 S5 _' A. e' C. t7 q4 l: u6 _ for(k=0;k<=4-2*i;k++)
2 j( L* ^. n7 _' |  printf("*");# R0 u0 S0 n% q* n, e
 printf("\n");
2 k: v. `- U- R, M2 z' W' f }# c' a/ w: c& }/ r5 I- U
}
) k* ?$ x$ {# _7 ~( D==============================================================/ ]( m' U7 b  M. Z/ e7 v
【程序24- N- g+ Z$ X! s  I) R: F
题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。
0 ~( ?' ?4 b/ {7 e. D3 E1.程序分析:请抓住分子与分母的变化规律。   Q' X% K3 j, Z8 {8 P3 H
2.程序源代码:
: [' R9 @7 k. ~  [  |! T% dmain()7 ~1 B2 R/ i, E4 y4 W0 {  V2 }( a) D
{7 V8 x9 f5 U, z' U1 `, x
int n,t,number=20;
# k9 p2 N' \$ d! F5 q( K  P  Mfloat a=2,b=1,s=0;
! T& \7 q$ a' J& Q( |6 G& tfor(n=1;n<=number;n++)) `  Z. W( R4 h' W' T
 {: h. G* E: V( a4 I# x$ y
 s=s+a/b;
7 f' Q5 \& F, e5 d4 k, R4 F( X t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/
7 K6 a. m% x% r0 b' k }
+ @2 ]8 w2 `8 f. M" G* X: o' c; k; \printf("sum is %9.6f\n",s);- p5 G$ Z; z5 Q! p
}
& t" q: ~+ |( p# L/ K; s==============================================================
) M  J  b% ?7 y5 m) _$ X- c6 i& j【程序25嵌入式学习企鹅要妖气呜呜吧久零就要' f2 E! I( P* D4 G& r8 T
题目:求1+2!+3!+...+20!的和3 Z6 W1 ~4 O* ^5 }0 ]( p+ ]& K
1.程序分析:此程序只是把累加变成了累乘。
0 G9 g1 c7 V+ L2.程序源代码:/ `* o0 Y; J: H1 b, u& R
main()
! c" m5 g0 L3 ?6 ]/ X/ ^& u5 |{9 V* Z7 h; [5 {4 M7 B/ K
float n,s=0,t=1;9 H" i7 ~1 d. v2 s$ R) ]9 \) o
for(n=1;n<=20;n++)5 T+ q5 D8 g- g3 j$ @; N
 {& }% c: U2 x& _3 Q" ?" B, R: M
 t*=n;) ~, @! n! F; o$ L: i
 s+=t;
- J3 [- `" j! |5 J7 C }( @# [! ~0 S* M8 ?) Z& r3 m
printf("1+2!+3!...+20!=%e\n",s);
$ B8 U" s3 g2 u5 d}3 X- q) g# n1 z" z, E* F
==============================================================5 a& [( H2 A7 n7 G2 J% ^0 q; R
【程序26" u# O+ Q" }( N+ q
题目:利用递归方法求5!
  I  w3 S7 J4 J4 Y1 s# Y: M* @1.程序分析:递归公式:fn=fn_1*4!
7 I; p" ^. ], L9 |% `( N" J- B2.程序源代码:
& L# d" H  `+ ~5 b#include "stdio.h"
1 o. ^/ O4 X8 \% l* h9 }main()! _0 O& b' P; @0 q
{
$ Z7 p- ?. z- l* J" u7 B0 H. wint i;
2 c8 J3 v- q9 q2 cint fact();; \1 Q3 ~: U- u! `- ^
for(i=0;i<5;i++)  {3 ^: R3 s! S9 L
 printf("\40:%d!=%d\n",i,fact(i));( H# V: r; }4 w$ Y* A2 G
}
% a; A6 |8 o/ i  I( c  ?3 _/ {int fact(j)
  U1 K1 V6 i+ z6 v5 U2 L8 m$ mint j;( \$ u9 {3 J( c, J; z
{
* ?5 l! Z) J# \8 Iint sum;
* N: ]2 p# @' p1 f3 F% o) Xif(j==0)- U' s. m5 H& B4 `$ U
 sum=1;7 B) n( C7 c9 L0 t" O: A
else
8 i0 O1 q# u' z* y7 \, S sum=j*fact(j-1);
3 q/ J- }% X/ \/ e' [2 {return sum;, e: L, b7 B9 H6 W( w- |( W# Y
}, v* F$ x, q' j& }6 U! S0 U2 ]* g
==============================================================
- k( ^+ w, }" `( b9 J! i! Z- S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-8 22:05 , Processed in 0.066664 second(s), 33 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表