找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

C语言经典算法16-26

[复制链接]

114

主题

136

帖子

1000

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
【程序16; N- B) @" z# y7 U+ I; Q) b: Q
题目:输入两个正整数mn,求其最大公约数和最小公倍数。 6 c# m% `$ Q9 \  x

+ n7 C% p' G! ~' ?/ m# Z/ t, i9 v/ B% D& G, ^/ N
. p$ I* L( p, M
作者: zhlei81 2005-1-22 11:30 回复此发言
6 J! ]& v+ |  `" t2 E$ t1 [% Q& Q
; O  d, a& g$ D) T" f8 x# e--------------------------------------------------------------------------------
. R, y% a+ R+ ?* V9 b1 ~  b% |, U) j# ?) `0 z; V# B4 B
4 回复:经典C源程序100
0 E; I0 U1 n8 {. c, W+ d, g$ a1.程序分析:利用辗除法。
! F# b4 V% {/ d0 D, {1 C. Q2 E$ \4 O0 U
2.程序源代码:
/ Y  D$ Y3 T7 e& [- Rmain()
, [8 {/ r7 N; \{
; A4 q: T, P" yint a,b,num1,num2,temp;
2 ?( a' l7 E( {' O" }printf("please input two numbers:\n"); ) l  O6 S7 G  _4 r. V) L2 }
scanf("%d,%d",&num1,&num2); * k& X* f9 L0 J
if(num1 { temp=num1;
' \' X4 S) P! K' i$ }4 t/ wnum1=num2;
7 E7 e0 {( D$ e& e/ T/ W! G/ {num2=temp; 9 d9 e" Q8 N" d% X; K9 D
}
1 o6 w; D5 a. k, l- `a=num1;b=num2; , w3 u: d) w9 e  A- i% V
while(b!=0)/*利用辗除法,直到b0为止*/ 9 W' i% c& N+ A% L
{ - g" Z9 l! ^1 n  M7 J, Y  S' T
temp=a%b; ( S- C0 G- M* y3 A4 g
a=b;
+ j' t1 |2 e. f. f; \4 l  }* |" Ub=temp;
- \- x7 I! i; f' ~. k}
' q4 |6 O, \" T9 h7 eprintf("gongyueshu:%d\n",a); ) J: q1 r2 d6 z# P
printf("gongbeishu:%d\n",num1*num2/a); ' X" @. Q1 m% u! P
} " J4 L7 N( u7 G! z1 `
============================================================== ( r9 n% D! W; V: K4 e- D" L
【程序172 j7 c- n( k4 ~5 `; T
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
( Z9 ]' {$ S8 E" Q# j1 [1.程序分析:利用while语句,条件为输入的字符不为'\n'. % J' C5 X( f6 p3 ~7 A) }' B4 U- G

. ^; ~2 q' Q. b  {# M( x9 p2.程序源代码:
  g0 o$ w. ]8 {5 A. N. H#include "stdio.h" ; N! r2 z# }  J9 |2 l
main()
* H) Z. Y+ E- ~* I{char c;
8 B# z4 y( z1 J6 c% Jint letters=0,space=0,digit=0,others=0;
- W1 `- Y$ v' ]& Z6 nprintf("please input some characters\n");
- u, S' @1 T; w- q3 I1 B' n5 @5 P! s" {while((c=getchar())!='\n') ' R! U" I$ O4 a' G4 E8 h
{ 9 R  j9 t! ^. ?! a0 L% z/ r; r6 H
if(c>='a'&&c<='z'||c>='A'&&c<='Z') 2 M: \# L! k8 B+ b7 U
letters++; 3 d/ |. _8 j' w  Z
else if(c==' ') ) a3 k' I9 B# K; r; w0 r8 Y
space++; ! e  M# v. |& k& N' s
else if(c>='0'&&c<='9')
0 M% ^% V4 C3 H6 m2 _  A9 [& Cdigit++;
7 |% i! Z# P/ Q' p) {) g* Aelse
; g  ^# }( V1 Z0 o0 Eothers++; % z, d* p1 l: g$ k# e- e& n% ?6 h( l$ B
}
( Q$ u- c" r% d" ]5 @7 xprintf("all in all:char=%d space=%d digit=%d others=%d\n",letters, % z9 F5 s$ K0 B* ^/ e  _$ c  p
space,digit,others); ; F; _* |$ O0 Y. ^( K( P4 J
} 1 z- V; j- L( f9 {9 _
============================================================== ! r' \& u6 K+ ^5 G) x
【程序18
1 m$ ?8 |: \+ r' h& |, V6 \6 Z) Y题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 6 d% z9 N. k% K3 f# |
共有5个数相加),几个数相加有键盘控制。
- d, N9 m, w% r5 B' n, P; n1 \1.程序分析:关键是计算出每一项的值。 ! `) p0 X& P4 i8 t. r3 e6 G
2.程序源代码:
5 d( V! i1 ^- [0 D* Y$ r. Mmain() ' @& ]" C' o" q5 [) T5 r. C
{
: D) O- |4 b( V, w+ Z0 oint a,n,count=1; ( t. m1 b2 R; A3 q
long int sn=0,tn=0; 1 i- \) l& r1 }$ u' J$ H
printf("please input a and n\n");
% w: i8 E& ?/ iscanf("%d,%d",&a,&n);
7 v7 e- j& i% H, yprintf("a=%d,n=%d\n",a,n);
: Y) [+ V! p; Z  w' g6 t3 p: Xwhile(count<=n)
5 z; S5 G- W+ C! {/ G5 U{
5 z4 ~6 r/ j* Q2 \+ q* {' Y' ctn=tn+a;
( R* {1 _( f' ^  y! wsn=sn+tn;
7 d) k% Q+ M6 n: Na=a*10;
$ s- b. h* S( D5 `: V5 a  O++count;
6 @+ N  ]4 q; F. Q! I5 m, h( Z} % i2 Q& h* Y. f& f8 {
printf("a+aa+...=%ld\n",sn); 6 {& s& U' C* x2 {- M
} 9 _4 Y* e" U: Z: A/ G4 J
============================================================== : S" O( A/ w) h" N
【程序19
1 Z, |6 K2 J% s* u$ ~; |题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程 - P' L2 q/ ^/ m; m( N
找出1000以内的所有完数。 , X* j) G1 x( \: ~2 q- \
1. 程序分析:请参照程序<--上页程序14.
0 m3 [4 m) e5 i; ~8 }2.程序源代码: 2 L. L( M( S7 R) A3 L, `9 C
main()
" \1 `) J8 j3 o; G{
/ T+ @. s. s' |: d0 @" wstatic int k[10]; 7 F* }# @) q" c, G+ |, v5 Z
int i,j,n,s; * z6 k9 o/ j% X/ q2 {' n
for(j=2;j<1000;j++)
2 S, M' i3 J3 a; q7 b! g{
5 S, S  \7 Q  L" y" Qn=-1;
8 [8 f0 S( s- V' y& Os=j;
/ i% h7 ^2 o- y: e7 v$ R! K2 t$ Qfor(i=1;i {
1 d" f' _7 ~, H2 w5 lif((j%i)==0) ) Y% q, m+ O$ O# Z! r& N! k$ }
{ n++; * P. i3 }/ X' I
s=s-i; & N( _0 P7 Y' s6 u( ^
k[n]=i; , N/ V/ q; j* q; k
} 5 [  a0 i* \! C' F9 F. Q
} 3 [+ F. Q2 F& {  n: {
if(s==0) % r4 s3 Q9 M) [2 M& Y0 M
{ 6 y) D' y1 K- [3 p
printf("%d is a wanshu",j); ; u5 g* E+ _: }$ [  {; b
for(i=0;i printf("%d,",k);
# p* D4 ^8 W6 ^$ k3 `printf("%d\n",k[n]);
4 ~# _! N4 }/ t* s}
. n, N/ v1 U& n4 S} 1 k0 _+ H5 q* M1 f" ^- p1 M) _
}
0 S' A  x& T4 I& n/ L) O==============================================================
: q, Y+ N5 I& N# A# p【程序200 c) k$ {( i; M8 p
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
0 p8 w  [) X  [. @  l) N! y10次落地时,共经过多少米?第10次反弹多高?
4 g3 H, y: W' O# k. |7 u: S1.程序分析:见下面注释
8 Z* f3 N# R% |# J( C, H3 \3 T- E2.程序源代码: 5 Q& C0 d  t# Q$ m2 M! O
main()
; H3 s! F9 I( ]8 r{ 5 U* O6 @& f8 r6 t: d$ |
float sn=100.0,hn=sn/2; 2 H, p% O8 _1 b3 r: b
int n;
+ z# o4 R0 H; s/ {% _# Y, @for(n=2;n<=10;n++) - |8 W( j8 S9 a% o' d' b( J
{
+ |1 }$ e4 L$ h' R. Q0 {. Tsn=sn+2*hn;/*n次落地时共经过的米数*/ 3 C4 A, l  U4 g; P# R- f
hn=hn/2; /*n次反跳高度*/
8 D4 M% r7 t" W1 R}
6 N9 r+ i) e6 n7 V- r9 @* N! zprintf("the total of road is %f\n",sn); 2 P, Q8 U9 K$ f& t' a8 T
printf("the tenth is %f meter\n",hn);
  F2 D: p4 z% ^# {}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个3 w3 R& ^; O; M- N4 ~$ j9 K6 a
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
7 U1 ]2 N0 T0 p3 S   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。$ K6 z. R' z1 u* T
1.程序分析:采取逆向思维的方法,从后往前推断。
( D. B+ Q/ H/ ~& G$ M2.程序源代码:5 I& p3 ^% Z, [8 u9 H3 s' u: _# t
main(). D( d# z* W$ }9 k7 |* g
{5 T7 i# Y: J, N% y) u8 h: H' g, X
int day,x1,x2;- Q$ \+ e( G2 _, ~+ D( A* W% B
day=9;. i4 c( m# ]- Y  j% c3 h) d
x2=1;
, `0 ?7 v' @* P5 [; A6 Fwhile(day>0): N" R& U# N$ E4 o7 j/ h
 {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/
# P+ K$ n: `% p% o& X x2=x1;
& Q2 H+ z: r" w" L$ X" j; E# f* u day--;
  O. i2 U2 ]( H7 U! U% @ }
2 b5 Y7 t( N1 U' kprintf("the total is %d\n",x1);
6 z. k  ]; B+ ^9 p! |) I. t/ A}2 V0 k, n. [6 J% Q4 V
==============================================================
& J6 E0 ^$ H/ a  ~; p7 B【程序22
- Q; F  b( s( b5 {9 M% f题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
9 o1 `# l$ G4 V& A6 K5 z7 Z5 [   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
6 m+ Y- Y8 X4 P; ?   三队赛手的名单。
* g; y# d! l7 P5 E" {5 ]. y) w1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,
# I7 v& W' D& d: Z- ?5 D; B3 x, y$ N      则表明此数不是素数,反之是素数。       ) o  ^9 D; U2 a# ^3 T' j
2.程序源代码:0 Y* k3 W1 k% e6 M7 a, s) L+ o2 u
main()1 E  _% Y. \" K4 N
{
9 @7 v8 c. k, L/ Qchar i,j,k;/*ia的对手,jb的对手,kc的对手*/
5 `0 I# N4 A4 s3 ^* h6 Ifor(i='x';i<='z';i++)
1 L4 C+ q6 H( n2 i& M for(j='x';j<='z';j++)0 v- ~, R3 K; t! z- t& w! z
 {
4 R; z. j" I8 n1 l3 Z8 R if(i!=j)
( x1 P" s; v% h. T$ C) m  for(k='x';k<='z';k++)
6 G  D# f2 p) p: @8 o& E' a0 n  { if(i!=k&&j!=k)# f2 e9 g" b  ]
   { if(i!='x'&&k!='x'&&k!='z')/ E% b8 |6 S' g) F9 L% v* x
   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);( P- |6 s7 X  J" {/ b* a
   }- x7 T4 q- h7 m
  }- u7 X% Y3 R; \" `7 `" H
 }
  u" v: d' a/ H# F2 J  @- s! U: B}
  N' j4 P, J# d9 G" w, r6 a6 ^/ l==============================================================
4 p) S; _% O  C5 @/ R【程序23: k  T. k* f4 h% n% c) T
题目:打印出如下图案(菱形)
*3 Y: F8 u( T7 W. }/ _& I) {
***7 b1 V" a8 J4 |8 N& n3 \1 [
******) n- K9 e8 O; O- p7 e
********
' v4 X$ o9 z, e. i+ K******
& O* V/ V* }1 f/ d% {' X) s***8 |. i6 g" s, ^+ n
*+ g/ F; ~; F- u
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
  ?9 |0 b1 U: {1 `      for循环,第一层控制行,第二层控制列。 ! T6 e* X/ S- k8 K: D
2.程序源代码:
7 _! h7 z$ `2 v, v+ b6 A" nmain()
( Z" m% M/ l6 g: `{
# |3 |" ]: u; h4 Zint i,j,k;
) ?( t8 S) }# ^; @. s) b' g3 Jfor(i=0;i<=3;i++)
6 G7 o6 ?! d! Q6 k {
7 V) P* w+ R% Q, b4 A$ g for(j=0;j<=2-i;j++)
! Q  v; R. J- m- ~9 M  printf(" ");4 J; j% f2 j8 Q8 ^9 E+ i! X& R
 for(k=0;k<=2*i;k++)
! F( B+ T2 w+ |4 @0 T  printf("*");
' e! ^8 i' f) _ printf("\n");
1 a2 |" i! O; ^ }
& K3 l- _) ~1 {4 }. vfor(i=0;i<=2;i++)( v, M9 d( ~$ ~( D9 [* `
 {
  G4 I4 u$ {& ?0 M7 w for(j=0;j<=i;j++)" H# T5 I4 y! Z  k7 ~
  printf(" ");
3 Z+ d1 F/ u: X* c( { for(k=0;k<=4-2*i;k++)
, A9 l& i9 c/ ^; C, K+ H3 m  printf("*");. J8 D" Z  ?/ {* J! l8 `( P
 printf("\n");
3 @8 X* g9 {& `4 n/ e }# n0 }5 w; w/ L; q6 C
}
- N* @5 N( K+ x, \1 X( \1 ^' ^+ \==============================================================  t# [5 m# w7 U) A
【程序241 u* L2 k; ^2 q  B1 L, z2 y
题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。
$ W5 `+ r$ Z4 J! y: ]/ Q1.程序分析:请抓住分子与分母的变化规律。
/ @! F3 c! C% u& ^) C6 V1 Y2.程序源代码:8 {( s$ E4 P) \% q( d
main()7 m' k# m1 I6 }
{7 u5 a4 |& U0 ]# I" \0 i, Y
int n,t,number=20;$ V" d* {1 ~+ ^5 ?
float a=2,b=1,s=0;
3 S8 f0 `4 t0 A6 I. Z& x1 b% yfor(n=1;n<=number;n++)
# ^  o3 g* B- v {
" m1 K" h+ x7 x1 q( Z2 s/ Z, v! a s=s+a/b;8 y# c1 f- L* `, n
 t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/7 Q6 c0 ?1 w0 P+ l
 }
! J7 j* x& N" T1 qprintf("sum is %9.6f\n",s);
, }) u8 y* C: N7 J}
% X) N. j- @5 F# k==============================================================
+ x% L- U6 c4 r. [【程序25嵌入式学习企鹅要妖气呜呜吧久零就要
  J2 T0 ~( z/ @% ^+ s& Q题目:求1+2!+3!+...+20!的和: m; V# y* n2 [0 L% y: K. G: M
1.程序分析:此程序只是把累加变成了累乘。
9 k9 h- V1 @8 I( o$ B2.程序源代码:
/ p' L' X9 E# M+ Ymain()+ @( n5 m) e8 Z
{$ R8 P) i+ e; g4 k6 w3 q
float n,s=0,t=1;; e: _; Z3 `0 R. K6 x. _
for(n=1;n<=20;n++)& k+ r2 l7 u! {, p: h  C' N# U
 {
' c' a/ h4 m- D! g4 F+ e& [ t*=n;
3 J1 H) y, ~2 `' E, {8 p, f$ c s+=t;- K, W% V# q+ U
 }
  C( d, h% p9 r0 O: Q1 v( O4 A  O2 ^printf("1+2!+3!...+20!=%e\n",s);; Q7 V% L, H  [  q* ]
}2 e0 n6 p, f4 m
==============================================================7 [1 v" \& J5 b) V) O3 P
【程序26
; c) Z4 J+ u/ [# s0 j+ {题目:利用递归方法求5!
2 T9 B/ V9 L" l1 d2 P% x7 P1.程序分析:递归公式:fn=fn_1*4!
% E4 ~+ t) N5 i- V' q2.程序源代码:) S/ N1 l) ?  j% e
#include "stdio.h"/ E+ L" X, `* }- F3 @: O
main()8 K5 d. f% F+ b" c
{
* _# c* ^  b+ g: e4 e8 {int i;5 N. Q' v3 z$ e" c8 f! N4 Q
int fact();
& n/ r" X, F4 c  v* hfor(i=0;i<5;i++)  v" c; _. r/ \* v4 W" P
 printf("\40:%d!=%d\n",i,fact(i));
7 |# ^: l! P6 |$ i8 }! \: S}
4 W6 D0 r3 L( h+ `# Kint fact(j)# }, q0 T2 N" L& v, m/ o
int j;
6 g: r, M6 l' U# M' ?{: y( b. W% k0 ^' P
int sum;5 k6 d5 ^+ Z  u5 {8 f. S
if(j==0). b3 a& _- T4 t+ B$ z9 z
 sum=1;1 ]3 B" z. ~! K8 X& y9 ^
else2 ~' u) e6 b+ a
 sum=j*fact(j-1);9 R* G  m, [* W; o
return sum;
! ^) D/ ~1 S+ G- @; ~7 a}) G( ]2 S& l/ D+ R# @
==============================================================

+ F. H( F5 I4 S! q# [5 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-19 05:56 , Processed in 0.054559 second(s), 33 queries , Gzip On.

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

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

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