找回密码
 注册
关于网站域名变更的通知
查看: 335|回复: 0
打印 上一主题 下一主题

C语言经典算法16-26

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
【程序16
  p; E4 @0 f9 `+ S; u题目:输入两个正整数mn,求其最大公约数和最小公倍数。
* Q: R2 I* m- I) X& W1 B! `& B  e4 A/ J$ A+ k4 y9 ~

0 {; S4 p7 x& S6 c; J% V& T' D- K' s/ Q+ q) d/ n% J
作者: zhlei81 2005-1-22 11:30 回复此发言
% _' q( t2 c- _  J, O+ V5 M$ H% Q; ?' ~
--------------------------------------------------------------------------------
4 M* ~+ G8 I  R) v6 p; o) V- k# y  q" g+ W8 v0 M( G
4 回复:经典C源程序100
  X5 V# o' j7 \3 N8 K% {) ^1.程序分析:利用辗除法。 ! [  ?! a) i, }+ @' e, ?. q
' |4 e6 N2 _( `" D8 w
2.程序源代码: ' y  R+ ^7 i& x: @. v8 P$ ^- p& _
main()
/ U3 X1 L2 r; i4 d8 V4 j{ 0 D) g" A: V" p7 t# z* X- q1 H4 w- `
int a,b,num1,num2,temp;
* K0 c/ l/ f$ r4 d% g8 J" C9 oprintf("please input two numbers:\n");
, q, }3 E! q) u1 Y" g" ^$ @scanf("%d,%d",&num1,&num2); " `8 ]% E+ K4 a
if(num1 { temp=num1; ; N1 _$ T4 [. w6 c( ~- o5 w& a
num1=num2;
) b) a7 @5 o, e8 _+ dnum2=temp;
* S7 j9 Q: f4 H' H& ^, o6 M}   [0 O3 ]4 `2 @0 O4 U; e9 l/ y
a=num1;b=num2;
  n+ E  s" ]7 S, U. Twhile(b!=0)/*利用辗除法,直到b0为止*/
0 b$ w. r$ w- a) o{
0 \1 y+ x+ \: W* ptemp=a%b;
. v' c; [% l$ ra=b; 0 H& {2 w8 I+ H
b=temp;
8 b1 B" A- z- ]5 t  l} ; X7 ~; p; C7 t  f
printf("gongyueshu:%d\n",a); ) t* v7 S& B* a; d4 S) k# u; h
printf("gongbeishu:%d\n",num1*num2/a);   n. |" q$ r8 Z# Z2 [: O+ M  I
}
" w- ]# N+ Z; w+ }, h* c: A+ `( J  M============================================================== 2 w* q5 @" }6 b6 s
【程序17
* b3 a: `3 v; I题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
8 }4 z; C2 H. r. e4 @- ~. x1.程序分析:利用while语句,条件为输入的字符不为'\n'.
% m$ }: C4 W7 y, E
3 Q) P$ U! U( F8 m: s! c3 ?, u2 I  h2.程序源代码: ; Q5 u( C& V5 m! Q8 I' _
#include "stdio.h"
  g) V* C7 I, M% bmain()
$ O3 k4 D2 U* `" }+ N1 h4 z  z{char c; . b7 v  c1 r0 s6 o/ c2 n5 g" D
int letters=0,space=0,digit=0,others=0;
* f, T/ J. [4 r' u3 h5 f1 Rprintf("please input some characters\n");
  b7 O& e3 f. G: x7 Q9 ewhile((c=getchar())!='\n')
9 a& T/ n" e2 c' \7 y{ 1 V2 T/ j' U+ q3 m" |9 K) d2 ?
if(c>='a'&&c<='z'||c>='A'&&c<='Z')   N6 f+ W7 `0 `
letters++;
' t, ~! H" z) t7 ^0 Z2 C0 v- }else if(c==' ') + C) o7 k" o6 u4 O* Y$ r
space++;
; H. w) G9 k5 J( lelse if(c>='0'&&c<='9') ! C9 d) }4 ?  E
digit++; 2 m; D" ~, L* A6 ?- v) }
else ) F$ w& T1 K% p! |7 l6 q) e: [
others++; , y( `6 t+ e8 R$ l( ]) v" ?
} , s8 p+ L2 }+ `7 r- F6 l# R7 a
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
) D& a8 K0 Y2 U  r! @space,digit,others);
+ W+ o+ _! l, ^3 T$ p} ; P9 W0 V/ M7 G/ X+ h
============================================================== : T& m# J4 y& o- D  x
【程序18. T! l) ~6 n. \
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
7 w% F, ?9 C1 B0 J- @2 P共有5个数相加),几个数相加有键盘控制。
5 l8 O: P, y0 c! g1 e8 A1.程序分析:关键是计算出每一项的值。
2 P/ W* I; \) p/ U! m4 D# y) K2 p2.程序源代码: ( _5 q6 V# ?, t0 H
main()
7 H( G5 {; M9 B% d% q" m{ * A9 }& `( x+ e% ?  ]$ p/ V, x& O
int a,n,count=1;
/ _2 I' W; i- }) k+ ulong int sn=0,tn=0;
1 A: w$ i; \" n' \+ n: O! Fprintf("please input a and n\n");
5 M6 i' P  X/ v$ h! J) G  u$ }scanf("%d,%d",&a,&n);
! \4 G( h4 f1 P6 Wprintf("a=%d,n=%d\n",a,n);
* w4 K# O9 w4 p0 a; s, Fwhile(count<=n)
4 V$ u5 {$ @2 Y' a% {{ 3 J8 U/ k2 C* b2 y1 [5 b3 S. ^
tn=tn+a;
: x& D2 `% ^; C1 R, I6 }sn=sn+tn;
8 t1 L9 _% L, h1 i4 y- C% wa=a*10;
3 E0 A" ]1 `6 D! l& ^( a) a, \  i++count;
$ S; b7 h* M5 ?& F; S3 Y} 8 @) u8 p! ?9 ~' g
printf("a+aa+...=%ld\n",sn); . Z! N" W! H' {/ u/ S2 X
}
0 n3 p* i  a& V4 O============================================================== 4 x3 m8 ^/ w. w& u2 F) @- }/ m0 M
【程序196 n4 p5 K$ O/ p" c
题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程
( N: x% D$ ~* j# ^" S' `找出1000以内的所有完数。 ; S. I% A! r- p* @- W+ r# Y% r! K/ I
1. 程序分析:请参照程序<--上页程序14.
2 Y9 V6 `# Y5 Z  B4 b2.程序源代码:
' k1 K& w* x- G) }/ l3 }" U% ~main() 0 f5 o6 P  K# h8 y9 r1 z
{
; d# E, r5 Q3 U) Z6 [( ?+ e, \static int k[10]; 2 h3 w# }; ?4 q6 B
int i,j,n,s; $ s# b: X/ z5 K
for(j=2;j<1000;j++) 1 L. g3 k8 X- Z1 {5 m4 K( h
{ ; d  d8 }3 k! C& p
n=-1; ' {2 S- [5 b3 T2 L1 q
s=j; 4 k0 q5 `) X  n4 t
for(i=1;i { 0 F: A9 m$ g: c4 K
if((j%i)==0) ( ~3 l6 U0 U  l' Z
{ n++;
& K' Y2 w. F% m3 J0 N$ rs=s-i; * h# B# n) h- u8 H9 r
k[n]=i;
' E: O/ J" r! I3 h4 q& a4 P2 e}
% |/ a3 T/ Z5 Q  U+ r6 T' e} 6 ~9 }' M0 x6 ~0 x
if(s==0)
: R, v2 f/ j* ~4 j# G  x{
+ y2 i2 \  @7 a' P( Vprintf("%d is a wanshu",j); - c/ B9 @' O0 o/ U
for(i=0;i printf("%d,",k); % h% I, p) h/ C5 [! g2 k) J. v: |
printf("%d\n",k[n]); # [+ I6 o- i% `% m
}
% ]1 H6 ?, e) L5 D* j) D4 a$ T8 G} 1 W) ?1 U/ x/ H+ N! u
}
; d0 s3 M' J; l" `/ W==============================================================
1 n) {& P0 Y  G' z* B2 `& L% p7 W【程序20$ W/ W" S& z2 S& [8 _
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
2 q, Y2 I6 ]$ j7 m7 S10次落地时,共经过多少米?第10次反弹多高?
7 s3 q1 \  ^" `2 H8 Z1.程序分析:见下面注释 / m2 z' t$ H* |8 `) t& W! ?
2.程序源代码: 5 o( l; \! g# g3 w" S( i6 ]  f
main()
" Z  |5 M) W! A{
0 f1 ~- _1 D. E( R; f8 O0 Efloat sn=100.0,hn=sn/2;
% M% Q+ \5 Z0 e+ P; Z* lint n; ; ]" E! Z7 }& ?
for(n=2;n<=10;n++) ) y6 ?1 @8 G) j
{ 2 s& n  T: c" D! P0 A; v3 u! `/ c
sn=sn+2*hn;/*n次落地时共经过的米数*/
8 X! i5 K8 O, ^, thn=hn/2; /*n次反跳高度*/
( i/ O( Z% L- e; O}
7 Z5 @* L$ s$ L  |6 ~printf("the total of road is %f\n",sn);
! ]6 p0 T5 H! v: B3 |" lprintf("the tenth is %f meter\n",hn); 0 {! a: p( H$ `& \0 w
}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
/ |+ C& F; w3 l! n   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
# s! M- ^( T4 R% G4 P2 x- O   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
8 _" U0 d, F, a% v  P0 A( y* C" @; Y1.程序分析:采取逆向思维的方法,从后往前推断。& v+ C6 [" a# I! S9 @4 F( e* g
2.程序源代码:: C- D7 b' D7 @5 B6 Z0 X
main()1 H4 s" V/ @* {4 r  \
{
. k! X1 x+ t, ~8 iint day,x1,x2;
- `! `. ]: x+ F- Xday=9;
4 d% ?! `& }7 C: Y: ?1 _x2=1;' _) e3 V; H, f* J- I+ \( \
while(day>0)) X" e/ S: y% t9 R! w1 G
 {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/
  Z  b7 F2 T. r: A( Y/ [! s3 m6 w2 p( M# f x2=x1;+ q& p% }* I& l1 M; @3 `; q  l
 day--;% D: x+ C* X! |
 }
  |- S# _- \0 Uprintf("the total is %d\n",x1);, i% X* }) X& S' c3 [: ?* H
}
. V. s, z9 ]' x1 Q==============================================================
% a9 W) X1 K5 Q9 x. C+ U【程序22* ~5 R; x& ?4 F& H
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定' D+ \0 l8 Y2 @7 h* V
   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
2 E; v" e2 T" a* `7 T- @" c! ^   三队赛手的名单。
4 `) d3 k5 T+ F3 B4 p- ]9 }+ h9 o1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,
& _* u) t  G: W& f      则表明此数不是素数,反之是素数。       ( b. l1 }* B% t, X
2.程序源代码:5 d0 x: w* y$ p$ C1 f
main()! }7 c7 X4 o' }, z" }
{
5 P8 E) m5 J8 y% X1 ~8 W8 p2 ?, rchar i,j,k;/*ia的对手,jb的对手,kc的对手*/0 n* L) X1 r- Y
for(i='x';i<='z';i++)0 a0 [( ~3 }% _$ U0 B  k8 }
 for(j='x';j<='z';j++)
5 H+ E9 s, v& D {- U0 k0 N, v2 t3 I3 y
 if(i!=j)3 r# |( F9 J0 n4 s" `
  for(k='x';k<='z';k++)
& v5 V/ `) W- t% x: g  { if(i!=k&&j!=k)
. l0 r1 v( H4 X! G4 D& z   { if(i!='x'&&k!='x'&&k!='z')4 q+ A% Q/ o4 ]
   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
( ]) i2 \7 e  B  o   }
5 d. [- m7 i; _. i3 S3 h( O) }0 [8 i  }
% N0 h4 q0 p; K. D* p2 s }0 f% [3 ?* q( {
}* S" b: @) z1 U5 J2 e* `
==============================================================
& k- S; [6 c( e" r【程序23" F7 t! X" M: L9 a
题目:打印出如下图案(菱形)
*
: r0 h( ~) p- y$ }' k; g***
8 D4 |; J8 ~  \4 n% I******
. |$ Y! E' D. E% {********5 Z2 O9 P5 c" A
******: t. m$ s; Z9 z/ p. j! W
***
% `: \5 s# T$ Z7 t7 c*2 T  d9 \6 _+ p' l) g
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
1 o) f+ w! n& d& f# O* r      for循环,第一层控制行,第二层控制列。
- v4 ~# a5 d& G3 x. f2.程序源代码:7 m- h3 W2 l$ g( v
main()
! x. y) o0 V% U0 F) v{. F$ \7 Z7 b2 t( I" {( x
int i,j,k;
- t0 Y& _, r- G% g0 v$ C+ G3 k% K! yfor(i=0;i<=3;i++); S% o- A2 _) _) {, N' H1 J
 {
4 w5 N% z. Y% h+ d4 q, ? for(j=0;j<=2-i;j++)
5 `3 _% l  V4 y  printf(" ");5 U$ B# `( d- O0 s0 [: x4 E* ?
 for(k=0;k<=2*i;k++)
+ y' g* i( }& h# h% b. S/ L6 E  printf("*");
) k" D$ B$ G% K3 \$ [ printf("\n");
/ W3 ?( Y2 e3 _5 L }
, ?, q+ B; O( }/ t6 e3 ]+ Hfor(i=0;i<=2;i++)
# M6 B: \1 A1 `& c {
) d$ s4 A, i3 @6 t for(j=0;j<=i;j++)
% }- x: \2 @6 t# \) V  printf(" ");
4 `1 ]. ^8 }9 Z1 Q for(k=0;k<=4-2*i;k++)2 L# ]& Z- F. _8 {6 d0 p
  printf("*");
$ s  b6 z) P6 O. d1 D# g printf("\n");
# l3 ]% {1 s8 i }: U  ?7 L' w3 n' n
}" }. @8 u/ ]$ \8 Y
==============================================================
  i& {. `& H. o1 ^8 M) I' E【程序24
& F: m6 I3 V8 E题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。* b- ?- d- j6 U# Y7 I/ P
1.程序分析:请抓住分子与分母的变化规律。
8 f7 y5 ?( _3 g. }! B$ R6 J2.程序源代码:
% a& @, m' Z# t0 N3 I5 O; ?: `main()
9 Q) c1 q$ y( ^" A: Y{
2 l  r4 [, x3 Bint n,t,number=20;5 h$ J( B: n! `, d3 n
float a=2,b=1,s=0;
" k# b: L! r6 P. Q# M! k1 I1 s9 hfor(n=1;n<=number;n++)1 ~) d" G+ N6 G, C$ q
 {
( `; p( R5 t% z s=s+a/b;
& i+ \, c& l# V& y t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/
) w) {2 k# c% G$ Z7 J$ @) Z }
+ ]* |! ~: p; P4 U' x9 O3 Iprintf("sum is %9.6f\n",s);6 X7 i5 C* m" ]2 w/ l' V* p
}
5 f! J+ D9 n/ A==============================================================; @) m5 W# x6 U% z: e
【程序25嵌入式学习企鹅要妖气呜呜吧久零就要
5 s$ A6 K$ N2 K- O题目:求1+2!+3!+...+20!的和+ c9 p  i+ Q- u  A$ V& z
1.程序分析:此程序只是把累加变成了累乘。 ' w7 l5 z4 s# m
2.程序源代码:* T- p, O9 |1 z! W3 R, W
main()
5 ^: u2 ~+ o2 c$ c* N& L8 T% K1 y" [8 p& L{
4 o0 n! _, T; M' Efloat n,s=0,t=1;
# w& a, y; H) J! ?# mfor(n=1;n<=20;n++)
, b/ `+ n8 H6 B% E' c* ^" a$ X& N {
2 t8 |; x, z2 Y5 T$ D! f. B8 S* b t*=n;7 W. r# v+ P6 F, ]2 J
 s+=t;5 k# o  u* M. F2 G( z' p$ j; X
 }1 z+ j$ z( y) o. i3 X3 D
printf("1+2!+3!...+20!=%e\n",s);
4 E( x! \8 S( l8 v- u1 ]- h9 n6 d& F}
9 s) J: n7 A3 E# {+ X0 x: @6 K' n==============================================================
( V$ W" A: q: k1 O【程序26
5 W! y, l; V5 A题目:利用递归方法求5!* }0 X' q, `7 o- A, j3 e1 ]
1.程序分析:递归公式:fn=fn_1*4!
/ A! r5 [; r1 Q2.程序源代码:  T! F8 j  M: d1 f- n8 w
#include "stdio.h"
9 N. q' Z# V: Cmain()! b0 r- K5 v( w  I" R
{
2 y7 T8 E1 T3 Q/ I& Qint i;
2 X6 v9 Z, _3 J- H/ wint fact();
- q2 K7 e9 T" x- |/ g2 yfor(i=0;i<5;i++)
/ s" Q+ J$ H# `; E! C% s% s printf("\40:%d!=%d\n",i,fact(i));
& _8 J( J  }3 s/ b' |}
2 F5 d3 ^" f) m% z: L$ P2 Fint fact(j)
5 {4 u! \" L. d+ [( c. f& c+ \int j;
9 E) W) }2 }% _) q# l0 k) i7 u: g3 F{
/ Q/ G! G6 n2 E0 xint sum;4 c: U7 Y9 g7 S% z& o; }
if(j==0)+ ]. r" u. M; Q' c, M8 L0 {
 sum=1;
* H$ u) L  O+ w; |  Z0 y' Jelse- }, O+ O% S: o
 sum=j*fact(j-1);& }; q$ v/ u7 y8 C/ i0 y/ \$ e* x
return sum;% j  ?$ Z" |; M/ \
}
' S" {) q# m: D! B: D==============================================================
4 Q' k1 o6 z( K+ u# f
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 18:25 , Processed in 0.171875 second(s), 25 queries , Gzip On.

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

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

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