找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3053|回复: 1

C语言算法16-26

[复制链接]
发表于 2017-10-6 15:41:14 | 显示全部楼层 |阅读模式
【程序16! e! L4 Z3 B+ X9 z  c8 b
题目:输入两个正整数mn,求其最大公约数和最小公倍数。
9 O, N. Q+ e2 Z1 M" q; \  ~! a7 Y
$ I; s( p& I! v/ [1 W, L6 ]0 ~  o

# ~8 Q3 C  s6 M* a6 @+ n; b作者: zhlei81 2005-1-22 11:30 回复此发言
; h- J" n6 n1 ]7 I
: n" O1 v9 O- s0 }+ e; V# u5 w-------------------------------------------------------------------------------- ( V- }- Q  o6 F
8 s$ O& x- t: w, j; Y
4 回复:经典C源程序100/ ~/ \$ v) c: M
1.程序分析:利用辗除法。 , {! h' j" H* l( ~9 y3 \2 p

3 C0 ?& ~6 _( i2 y! c" J2.程序源代码: ( H# F/ T9 {3 a0 G* [0 g9 n# N
main() 7 c1 u( m) h8 |$ @% `; R& [7 j
{
; q, a  c. x& `* S/ Lint a,b,num1,num2,temp;
4 s2 y# v" `4 Bprintf("please input two numbers:\n");
- a  }+ `; z& v( [% y6 U2 B7 Gscanf("%d,%d",&num1,&num2);
1 w6 E* ?$ d) o1 ?2 S, C* Qif(num1 { temp=num1;
; G( n  v9 @' ?3 ?9 M6 Y  n. K7 znum1=num2; : `2 _3 H* S9 b9 }' ^/ ^  w
num2=temp; " c* m; L) U9 G4 b
} . p# Z) s* ?* s
a=num1;b=num2;
2 r5 R6 `1 K6 S& n9 }7 twhile(b!=0)/*利用辗除法,直到b0为止*/ % ^; x6 ^& u0 }9 ?2 \: V" h4 \
{
8 l' A. a$ l+ ~4 B3 y( |! f# Jtemp=a%b;
0 H0 b) u& g- C+ E0 V# [1 ta=b; $ x. h2 f' C2 i- h* i% G8 d
b=temp;
8 N5 K, _: S$ k/ n  r5 Y3 V* O} " X. P  ~& w) H# Y; l7 Q0 n
printf("gongyueshu:%d\n",a);
& X0 p" N& Y+ e# ]1 Jprintf("gongbeishu:%d\n",num1*num2/a); / U1 x/ [  W, j' M, D$ n) R3 }# E
} / j& S+ k) F, c! p  J
============================================================== * f0 q! E4 [, M$ m
【程序173 q; ~5 w% z. v- [* f  C8 G
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
/ K; N( F" Q; Y1 g2 E6 }" _1.程序分析:利用while语句,条件为输入的字符不为'\n'.
, X1 O& u) P+ S8 ]# g3 v3 B! F! M& g, _# h, V
2.程序源代码:
! ]/ w; v8 S: b1 [#include "stdio.h"
1 E# I" r' u! l+ Q" Cmain() 5 m0 W: p; \3 X" V
{char c;
1 K$ J2 W% W$ x# e9 S! b! x4 eint letters=0,space=0,digit=0,others=0; 2 h+ x; _2 T1 ^2 I" f) X/ b
printf("please input some characters\n");
/ ^& x$ V9 @" T2 X7 C; Iwhile((c=getchar())!='\n') $ d$ [, R( u* x2 N! I
{
" ]/ s6 t6 D5 Qif(c>='a'&&c<='z'||c>='A'&&c<='Z') 5 o2 Z4 d  H) `% m4 H/ M6 F
letters++;
1 r/ _; n# F4 R6 |else if(c==' ')
# w7 d* Y9 f: w& [" Lspace++; % G# S0 b' ^/ h$ u
else if(c>='0'&&c<='9')
* n, {' k; i; W' Ndigit++; ( o1 W- J' X( x4 X5 ~3 y" `
else   l3 u& S, ?; A. F. H; B! Y
others++;
" Y" S. H! Q% d) H! B}
0 ~% V& k# F$ e' B0 F$ Qprintf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
+ I& Z# l8 K( L7 w3 V. Cspace,digit,others);
3 W6 C# W4 [0 P8 v# ?' ^: M  O}
+ e0 p7 T* T- U, v============================================================== 0 [7 j# U8 m6 x) U- {3 {1 t
【程序185 {' u$ C- H; t) v9 A1 t" a" P; {& R' b) w
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 , x* F, S' H5 T
共有5个数相加),几个数相加有键盘控制。 5 \& y% g; f% L' ^* C6 ?" i5 _$ |
1.程序分析:关键是计算出每一项的值。 - x# T4 P  ]! ]$ a) ]. D& o8 Z% l
2.程序源代码: , u; t! _; l6 n7 ]( C
main()
4 [! P% U: L' @5 y' L# e{ - O$ ]$ S: h+ \
int a,n,count=1; ' f6 s+ J0 z  Z
long int sn=0,tn=0; 0 q& t+ L: n0 ~1 Z) e- e2 c& W6 c
printf("please input a and n\n");
: d* L$ m! X: A( Q# |; Sscanf("%d,%d",&a,&n); 1 L, O4 \% l3 G2 @2 y' }# b! _3 M% r
printf("a=%d,n=%d\n",a,n); " H: U' w, X6 w4 i* w# y( n  ^
while(count<=n) 4 r2 t5 j# Q. |2 J( R
{ 1 C0 N3 c* B2 f, `# _3 K1 n, K# K. ]
tn=tn+a; : `( c6 U; g, H, C1 u) l- R
sn=sn+tn;
: n0 b6 R( q* e, i+ a3 S+ Fa=a*10; ' u5 W$ N9 R5 f
++count;
0 _) I4 L& g' M4 ~4 A+ x- g/ q7 |* V}
( c% j! f) i6 rprintf("a+aa+...=%ld\n",sn);
$ b6 e* o% D" i}
! _, @1 I- H4 {5 Y==============================================================
/ }8 G6 ]/ @9 n2 e6 o! x【程序19
) s  L/ V6 p% T* U9 Q  m& ^6 `$ c; f题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程
+ Z9 {/ J. ^) Y) m! j$ v0 q5 e找出1000以内的所有完数。
3 ?% B4 f) k: d7 m8 v4 I% I1 k1. 程序分析:请参照程序<--上页程序14. # u, w/ O) i9 v5 q9 I, A
2.程序源代码:   @4 {  [$ [- |* i+ n* a
main() - T" A. y( a0 K( @! i2 [
{ 6 u% U3 |0 g) n
static int k[10];   `# e* y* }# `4 s. _
int i,j,n,s;
1 ?5 n: A2 x/ sfor(j=2;j<1000;j++) . t9 q! F4 S# U$ Y. Z+ j& J* j4 G
{ ) a" B6 H7 y3 m6 {6 o1 o6 f# T
n=-1; " Z0 a- L9 k" Y- m% ~; v5 K* V1 l
s=j;
9 X7 n5 D2 I+ r" X7 lfor(i=1;i { 3 K6 a) t% ~7 i* s! R0 [2 v
if((j%i)==0)
$ J; }  @7 A6 I  T$ ?* H- g{ n++; 9 u! j( ?& m0 T+ m: g7 B, s" O
s=s-i;
1 {6 n* J& G1 i7 ~- xk[n]=i;
; y5 s: x9 M, _) O1 u; L9 \+ c}
5 h9 [# h& \! _4 N; V} 0 i7 p4 F* q+ J0 _8 Y/ D" K
if(s==0)
1 s: g) z# U5 S3 x# _5 C{
5 C, O' @; m* W3 T) d' ~  M2 L3 Rprintf("%d is a wanshu",j); & u, F- z. ]- v) t! a* R
for(i=0;i printf("%d,",k); . j/ `  _3 r/ x) ?: U
printf("%d\n",k[n]);
. U3 C7 Q$ D0 v, B} 3 p+ s* f# o4 o! `! l5 A$ ?8 A0 t
}
2 ?' y2 ?9 k6 u5 Z( a}
% q$ g1 ^' |$ S$ n==============================================================
8 A7 E1 v1 p  Z5 _【程序20% b* T$ j" N9 ~- ], X$ n* m9 U
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
* I$ U! ]9 C3 A10次落地时,共经过多少米?第10次反弹多高?
, r1 n. {1 S( n0 l1 _& b1.程序分析:见下面注释
' j1 U& [# `* M7 M' N1 \9 ~2.程序源代码: 3 Y( \! s# U7 S
main() 2 a/ v  E$ P5 R  r1 o
{
) z9 J% K; U) x+ d0 yfloat sn=100.0,hn=sn/2; 8 A, h4 }9 F2 c; Y1 {, d; Z
int n;
% X8 z* D5 Q' a: M: Gfor(n=2;n<=10;n++) ; S  k: K* A! D1 K$ }& v
{ % r' _6 t# `- _% k
sn=sn+2*hn;/*n次落地时共经过的米数*/ ) _7 t, T7 ?; E. j, Q
hn=hn/2; /*n次反跳高度*/
: {. f: [$ l- l% l1 U7 @& s# B& J}
6 f& _- |1 ^$ ]  G8 s) g3 Cprintf("the total of road is %f\n",sn);
6 U3 P$ D9 e* ]1 r& Eprintf("the tenth is %f meter\n",hn);
- K: M5 L& m3 b2 Z" X}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
) h9 Q* u- p, W   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下! p( Z1 Z) k+ E1 J/ ^7 i- v
   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。+ ]3 O! Q3 Y; P1 G8 F
1.程序分析:采取逆向思维的方法,从后往前推断。/ B0 L, U3 b7 k
2.程序源代码:6 k4 z7 }. |: ^* _0 A
main()
3 B, K! Q$ l/ d& o0 \  q) M, h{  J, z! y+ @2 y( v
int day,x1,x2;9 V, n" u, @5 L' Z
day=9;9 r- {7 M0 Q: W8 w; x  {
x2=1;. A6 ~/ t# i2 `4 d' d' i  S
while(day>0)
& R6 u3 Z6 M# h" |/ O; z {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/" v5 T3 O$ p4 Z' l
 x2=x1;% J7 i8 N3 s$ Z# U
 day--;8 `" L) ]5 V1 ]) E0 M
 }
# d& |& M+ l" J( z- i$ S2 Tprintf("the total is %d\n",x1);
9 {# D: X$ l/ N7 E0 |}# j4 z) x3 s1 f0 }, q# a
==============================================================# D- A/ W3 e7 t4 \$ m, k
【程序22! K' V6 h3 Z  ]( Z
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定; ?" D; D4 |' j/ O4 {
   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
. T; o- T+ r. H% C, n( f   三队赛手的名单。
0 G# t8 \' p0 Z& U( r0 V& A1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,, d5 u& u; P% p' |7 |# E6 a3 h7 E0 i
      则表明此数不是素数,反之是素数。       " H. k+ t7 i$ b# R: D9 K( c
2.程序源代码:
0 N5 Z6 \% d; A9 Nmain()
7 ~) G; n2 {2 Q8 a{
) d/ i: y- r( p0 K* `char i,j,k;/*ia的对手,jb的对手,kc的对手*/* d4 J: L- |4 K, o: a8 ?; l
for(i='x';i<='z';i++)6 r( v4 U: y( v3 p- y  M  j
 for(j='x';j<='z';j++)8 \, L; L0 y2 y. w. k! O/ q4 u
 {0 _6 G2 M$ T4 s3 E- E
 if(i!=j)
, @* [, P/ A0 B  for(k='x';k<='z';k++)2 `, _, [$ ^: m' \& S7 B
  { if(i!=k&&j!=k)
9 ?: h& K! L2 a1 ?/ j; q( L( @+ h   { if(i!='x'&&k!='x'&&k!='z')# W$ @6 T% G. a+ y" z0 M
   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
3 a) ~) G. I% w+ e2 _3 L   }% K% E& t5 e  K, e4 f+ N
  }
) _( @4 P% w# p+ R5 | }
5 B3 C4 M7 y* T8 R% M1 q7 S}
; Y5 l1 O, D9 }8 _! G==============================================================5 D+ ], D/ ^4 C; \% `
【程序23
- V/ @$ r( x5 n) o: v题目:打印出如下图案(菱形)
*
1 \  L# g2 t. ?4 K' f8 q, `" a* S. h***
4 F! k0 ?, Z  z# ?. t/ F  J" v$ E******
1 f6 k8 b/ N' V3 S9 V" D4 j! k********% j, h% q# b: |! n9 J- N( W
******0 G8 N3 A" @& J$ ?
***. t- {" j3 J5 S( Z3 t6 R: F: |
*
$ ^! \9 o4 a$ O6 m1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
2 R, i4 o2 |9 e5 I6 f, J1 l      for循环,第一层控制行,第二层控制列。 % n. K8 q+ G6 L0 P+ W/ U- Z
2.程序源代码:( h5 W$ U2 ]) d, ?* {: O
main()
( \! o# m$ T5 S( P{
1 G; |9 `' Z0 _1 b" Y8 n: fint i,j,k;
- B- N8 e% P* g6 Z& Xfor(i=0;i<=3;i++)8 f3 R# _# s. y5 v% K* h
 {' X1 O$ e2 f: j4 j( Q+ J
 for(j=0;j<=2-i;j++)
  s! x8 S. S& i/ K, S4 v  printf(" ");1 s: f6 ~' c; p
 for(k=0;k<=2*i;k++)
4 g6 N2 A  L% S, x; f7 L" w4 y  printf("*");+ x/ t+ a0 t# f* Q. y
 printf("\n");
) K8 L8 r6 z; i. q/ h. n. X) j }
1 _" x* o4 T5 R9 U9 m2 u% ^for(i=0;i<=2;i++)
5 i8 u: O9 a% \ {
8 {" W( t# F( ^ for(j=0;j<=i;j++)5 q, F/ w  ?4 }) H0 R5 ]% @
  printf(" ");1 G) f0 y/ P$ k$ r
 for(k=0;k<=4-2*i;k++)
+ b* n# T1 a* \7 _  printf("*");
- l& l/ @- F4 R' \' X6 g) ~ printf("\n");8 G% V3 d9 t. V7 O( X
 }1 T8 p/ o- j) D! f
}" r3 k" t& J3 H  J5 {' R2 Y
==============================================================
8 E& F6 O3 d/ t【程序246 s9 X+ t0 K, H
题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。
- g6 Q0 s; p% \$ }) N1.程序分析:请抓住分子与分母的变化规律。
$ m# ]) x% Q& U2.程序源代码:$ x7 b$ X: T( x6 K0 ~
main()% J9 f: v( Y( [& ]- p, m, `
{2 g  U2 j4 m5 U0 ?. W3 v, \
int n,t,number=20;5 X6 @2 I; c* T' y$ W
float a=2,b=1,s=0;9 y5 Q& u4 @  |6 f( ~" }4 ]. P+ s: t
for(n=1;n<=number;n++)
- i$ p( q$ v: i8 J; C {, c  u1 V2 ^! d0 F$ W
 s=s+a/b;2 C3 ^) T5 |# b6 h! D5 f
 t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/
# i9 b) L0 U) y+ e# y }- \) ], {3 l) O4 o, Y3 I6 Y, H
printf("sum is %9.6f\n",s);
7 O$ ]1 P2 t* L0 P0 n}
+ Y1 Z- K, B7 \6 j==============================================================
! K- e; L6 k$ `" c6 g【程序25嵌入式学习企鹅要妖气呜呜吧久零就要
0 c3 g" y! ?5 M) Y+ l: d* \题目:求1+2!+3!+...+20!的和1 g2 @, \8 [2 }$ S' B- X& s
1.程序分析:此程序只是把累加变成了累乘。 ) I7 _7 z$ t) L. E
2.程序源代码:
/ R1 |2 u+ y( mmain()
0 @& I% \! m  s5 X% X% e{; h: \- G  u0 D7 [
float n,s=0,t=1;
; {# ?6 V, r' G' ~5 y1 ]- F4 H6 qfor(n=1;n<=20;n++). s" H! F4 }9 J% ]) K$ f
 {
: K5 D$ \+ Q7 I) ?7 A' s: E t*=n;$ I8 F' R1 D" u# I: O# |& a
 s+=t;
: I4 ~/ y% g$ N; n- I }8 [% N0 Y1 M( K
printf("1+2!+3!...+20!=%e\n",s);
" {: l; l8 q" @2 A, B}
5 W: o8 \' I6 b==============================================================- K/ Z% {( D4 D
【程序26! m4 d& f/ Z- h8 \$ a1 p# z
题目:利用递归方法求5!
- d3 e) }, C9 M! ^' ~% r1.程序分析:递归公式:fn=fn_1*4!
0 t1 w9 E* o5 ^0 V8 P2.程序源代码:- i: |7 `: p; I1 i7 A% {
#include "stdio.h"
8 s, U0 I2 A- m& G1 a, |main()( ~1 H4 a$ v. h4 k
{
- I3 S2 g! q: d, i$ dint i;% I7 q! I! g  U4 P) O& p% h
int fact();" U5 k% ^8 y$ s$ W/ f& Z  \- l
for(i=0;i<5;i++)0 ]8 S) z, p" h
 printf("\40:%d!=%d\n",i,fact(i));
. P; a1 r: @( r5 l1 ^, N3 j}
. ?, f# v# f3 H& a3 e# aint fact(j)
" m  _6 M+ o. M' e; g- Kint j;. ~7 B& R( d) `5 t- f. Z5 q
{
6 I4 W5 i* V2 S) y: C( h8 @int sum;0 L7 a- [8 _7 ]% V
if(j==0). v4 c( p9 N' Q* B* a
 sum=1;! m3 M( G6 N, b
else6 w" N4 q% K0 o7 U" P  U1 b( L
 sum=j*fact(j-1);; w% i7 L3 @- L% }7 l3 F# r# V
return sum;
2 Q3 r, M2 c$ t) ?' e1 D, C+ t}7 L0 l" H% J2 p8 b
==============================================================

. x2 D7 C. ~( C( F" ~4 r
回复

使用道具 举报

发表于 2017-10-9 21:23:19 | 显示全部楼层
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-8-23 18:34 , Processed in 0.056355 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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