C语言经典算法100例Word文档下载推荐.docx
《C语言经典算法100例Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言经典算法100例Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
z0F+t3])i1O
#include"
math.h"
main()-z%~7e%y#^)x+T!
j1c:
a
{2H#f*~-z'
\.c&
}9v8|1z*s
intm,i,k,h=0,leap=1;
%h-`2[-j6w7Q5V/q
printf("
for(m=101;
m<
=200;
m++)
{k=sqrt(m+1);
(a(i8F+Q7r/D!
u.](o6}#V7Q
for(i=2;
=k;
i++)'
Q7{:
Z'
N!
T:
E3D#a#U
if(m%i==0)
{leap=0;
break;
if(leap){printf("
%-4d"
m);
h++;
if(h%10==0)5h-E\g0H#x.A*~7m
8K;
]3w%v6O0q;
[1Q"
Z
leap=1;
\nThetotalis%d"
h);
};
u$V:
b:
c1T%F,b
Z!
N'
J"
o(\-E#i;
g
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位
数字立方和等于该数本身。
例如:
153是一个“水仙花数”,因为153=1的三次方
+5的三次方+3的三次方。
$_/s9e1a8R(\n
__________________________________________________________________
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
___________________________________________________________________9e(w*y1~Q9Q:
i(i0k
'
W%Yv,^1h9{
inti,j,k,n;
.?
!
Q;
I:
{;
Y!
{
waterflower'
numberis:
"
7u'
q2L%L%B'
N)d
for(n=100;
n<
1000;
n++):
]#m)\8[-Q5^8P
i=n/100;
/*分解出百位*/
j=n/10%10;
/*分解出十位*/
k=n%10;
/*分解出个位*/1R6|7w-g3s7\+@.f#b
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k);
Y.ls0H)r^-`
{3e,k4q-d.V+k#Y:
e
%-5d"
n);
}0X:
k2J$g(a3A+v2D9`
&
?
3`%B*z(Q%i
}'
C%K-J0e'
f6~
将一个正整数分解质因数。
输入90,打印出90=2*3*3*5。
+J/{5x0V9L+M,w(_
$E/S"
U&
e$R5z8z
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完(k#{%Q1xl-O
成:
({*G&
[7M$b0E+x%{$d9L
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<
>
k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正0D3l&
k&
|"
r+W+Q#n
整数你n,重复执行第一步。
0s&
M'
L"
C1b5v#t7v)|,V
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
2J(h1?
7R'
j7l
;
g.u'
O&
W*K'
\
/*zhengintisdividedyinshu*/
intn,i;
\npleaseinputanumber:
scanf("
%d"
&
n);
%d="
$a-Z;
b*J.h7D8l0w#X)U
=n;
i++)
while(n!
=i);
J.k/{:
p*d#m3S7|3}0B3c
{"
d*v5N(\(h*i9P
if(n%i==0)
%d*"
i);
*B&
l(v"
[2^7Q4E
n=n/i;
2?
a2|x7X:
@[;
{,n#J
}1D:
W:
h-d/t#o*W&
E:
r
else3y5];
V'
JT8b2a
4^%I-@-w7t1b,t
}"
g$B2e1A:
F6q8v,s"
h.o
e;
t6C"
S#~1d$H
利用条件运算符的嵌套来完成此题:
学习成绩>
=90分的同学用A表示,60
-89分之间的用B表示,60分以下的用C表示。
1}(Q#`#\*\.t/S
__________________________________________________________________;
K'
p3i*z:
s$P'
k"
j7j
(a>
b)?
a:
b这是条件运算符的基本例子。
v5g(k4J9Y
$[%_'
T6V4A.m5{
___________________________________________________________________-b(SP3E2k#P3f5p!
g,d*H*s)Y
main()([:
M%n'
{,f$\/g7W,\
{!
Y#A4w-q2U.k2s7x
intscore;
chargrade;
pleaseinputascore\n"
score);
3H6q.D&
U/a%T(z;
N"
K)O1\
grade=score>
=90?
A'
score>
=60?
B'
:
C'
%dbelongsto%c"
score,grade);
1U!
j*j/[1g9j"
[)T
t-Q0@.y!
c
输入两个正整数m和n,求其最大公约数和最小公倍数。
.u4S:
O9J5O+s&
K%q*q
利用辗除法。
Y9D"
u1k%b+X$d0Q6}$R8X
1T#Q&
|-nv!
PX4z.{
___________________________________________________________________'
q6g4l'
y-[8G7}5`*N$^
*n%i#m.b/d
inta,b,num1,num2,temp;
pleaseinputtwonumbers:
d1t2W*D%r4eI
%d,%d"
num1,&
num2);
if(num1 {temp=num1;
num1=num2;
num2=temp;
};
b1e*m)e9k1p%s#F*[#U-{%B
a=num1;
b=num2;
while(b!
=0)/*利用辗除法,直到b为0为止*/0~"
d\;
k6rA3v%d
temp=a%b;
+o%w8A;
Wy.g
a=b;
$g,G:
VM#X5P-]6k9T
b=temp;
gongyueshu:
%d\n"
a);
f,S/q1O)N9S0k!
`3U-i
gongbeishu:
num1*num2/a);
+K/v9e&
j3w
u7m4a*["
N9`(Y%F*p
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数8O'
oG4F:
Y'
{'
j
。
7r;
j:
@$V(e-}
__________________________________________________________________0x6i5n-n;
b)E;
X,u
利用while语句,条件为输入的字符不为'
\n'
.2u/M6j2L4g!
r9}:
A
W+M!
P2C(w4v;
V,a+d
stdio.h"
E0Z/}#w*G;
z-X2I!
U
main()'
S4g5l1f1L7~(I
{charc;
intletters=0,space=0,digit=0,others=0;
pleaseinputsomecharacters\n"
while((c=getchar())!
='
)
w'
o0Y7R6w2V"
W-h,q
if(c>
a'
c<
z'
||c>
Z'
)"
W.f'
\6V.A
letters++;
elseif(c=='
'
space++;
9i1~8D%l*H5P%J
elseif(c>
0'
9'
)'
]&
h/Q7`?
7l6_%M
digit++;
+d/V9l9Q6s.M$A
else
others++;
*~)@g*u,r1~*p3Z(]:
Z-];
~1M
allinall:
char=%dspace=%ddigit=%dothers=%6D,h,@9@;
a&
D5c
d\n"
letters,space,digit,others);
a7m;
T#|*G2v-Z0n0f-o(X(c
}.X'
y)t+G:
i5M8?
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如%Y0o5W.F7f%]
2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
__________________________________________________________________#[;
N%L$z*\0x&
关键是计算出每一项的值。
(Q$M5`$y5`9k3?
*i
___________________________________________________________________9J2C0i9s8J1w/u1J)`7^
6[6b0F#{2nL$k$d9f$l
a+k0l&
l,q3W!
n
main(),L&
~"
C!
J9k9|
{1v#z1k(b;
D7E$m1A:
g!
p
inta,n,count=1;
longintsn=0,tn=0;
pleaseinputaandn\n"
5n#c,n2D'
`0X4o
a,&
*l9^#i;
d:
_8s(b$V-b.E#p
a=%d,n=%d\n"
a,n);
while(count<
=n)
{2{.D/vt0`
tn=tn+a;
sn=sn+tn;
9Q&
J.D1O2~({!
X.|)}:
K!
a=a*10;
5o/Z4H;
\2J3k&
rd9f
++count;
a+aa+...=%ld\n"
sn);
一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2;
N1g*y"
R.w%U)T1H
+3.编程找出1000以内的所有完数。
___________________________________________________________________(_4H5h&
{&
}8k'
b3K:
u
{4i1Y*a$t0?
0C4s'
|
staticintk[10];
inti,j,n,s;
9M!
W1o#t(~,{
for(j=2;
j<
j++)9E;
~9`.f!
E5E.z
n=-1;
s=j;
(t3j:
N0S5o2u"
@!
A
i {3x3C'
['
L#@:
Z1f
if((j%i)==0)9D0S;
~*t2H;
P%Z
{ n++;
s=s-i;
1\/y!
K*`;
L*T,Y*X&
[/y3u-Q
k[n]=i;
}([2L9q"
V$A9~1X/K0J
if(s==0)
{%{;
i#@4p:
b-q)E"
j-S&
o
%disawanshu"
j);
F+M3FW0H9C/};
X*J
for(i=0;
i printf("
%d,"
k);
8J1])y!
B)p*^%U
k[n]);
}7j/~1v5a1u%p*]
一球从100米高度自由落下,每次落地后反跳回原高度的一半;
再落下,
求它在第10次落地时,共经过多少米?
第10次反弹多高?
6A"
G'
h"
\/k(ok#B8a
6o5^8a%Z%u,S(m
main()&
[.].j:
wl-P
floatsn=100.0,hn=sn/2;
intn;
for(n=2;
=10;
n++),N5a2G-`/[0p)a
sn=sn+2*hn;
/*第n次落地时共经过的米数*/3T:
h'
]/t,C;
H({9K
hn=hn/2;
/*第n次反跳高度*/!
p)q1j6V'
q5j(T
}0J5e4k#]6Z'
r9[+D'
c"
thetotalofroadis%f\n"
-eT5g%e8r0W-]-x
thetenthis%fmeter\n"
hn);
8K+Q:
M&
t:
N&
M0B9D+{8`
}:
w;
p[1I/f1p~6i
%\,J@%{!
_5E8W
一只猴子摘了N个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的
一半又多吃了一个,到第十天的时候发现还有一个.
7[(y0Y2~9m4q'
N
___________________________________________________________________"
u7A0e!
r)Y;
H4B
/*猴子吃桃问题*/
main()!
k!
C3r3o"
G7I&
L7Y
{8E'
A"
O6g+\,t
inti,s,n=1;
/W"
t/j$f7H%B
10;
s=(n+1)*2
n=s;
第一天共摘了%d个桃\n"
s);
-j;
_7`6h'
|$w.D
}0f-k:
Q3j,f)v$P&
B
9})D.M;
R8?
2A
迭代法求方程根$J3z(B6S-Y"
N9f;
Y
7\u/Y0n4k:
/*迭代法求一个数的平方根*/
#defineEpsilon1.0E-6/*控制解的精度*/'
`$T/s/v9L"
Y4f.nC'
`1R7U
#include<
math.h>
8L:
M#^'
Y5v#B7]
{;
G/x/y+v$U%p&
W2o
floata,x0,x1;
请输入要求的数:
%f"
a);
8k#o6^'
}7R0[:
s6o9]5C
x0=a/2;
x1=(x0+a/x0)/2;
}4E+b!
U-M2M)f#_
while(fabs(x1-x0)>
=Epsilon)4V&
^-t4^9Y3U#g
{9@%n6R7i7C'
t"
x0=x1;
6N%C5e*j9?
B-m2U7x
}$I9S*|!
T%N"
o)g"
R)G.g
%f的平方根:
%f.5\n"
x1);
+h)b7z2|6o-Y%t
M.g:
i.q-z,N$?
1r2p
/*上题的另一种算法*//D&
J)q5s.@
#defineEpsilon1.0E-6/*控制解的精度*/;
\'
o,u!
Q*q/K&
Q"
}
#include<
stdio.h>
(]!
s#W:
o8E6W"
#Q2s)g'
pA$M&
`3_(O5t.|
main().Tt,K(G+?
2h)?
cA]-B
{/x#Z8B;
a!
T&
Q'
E.K
floatnum,pre,this;
do
num);
/*输入要求平方根的数*/
}while(num<
0);
5z)},z1^+T-s5Y:
f%n2`
if(num==0)'
i7Y#w9Z/J6B#U/{3M5a;
therootis0"
~7{/v&
D-~5y&
I
{)U6y0oF1b7y6K0H.W+p)T
this=1;
do/T9J%s#I9|*V
{8}.l#N&
y4Y
pre=this;
this=(pre+num/pre)/2;
}while(fabs(pre-this)>
Epsilon);
/*用解的精度,控制循环次数*/0x:
`/X%Z'
W7P#C!
J)\
}0T*g3P8O;
F:
R6N0L
therootis%f"
this);
}7L!
e%@+y;
X9h
用牛顿迭代法求方程2*x*x*x-4*x*x+3*x-6的根!
l$P7g(h)\*C2I(\
/*牛顿