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

C语言经典算法100例

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
【程序1- f2 r' n/ v& o' A9 K+ [
题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 6 D. U" C5 q  A! q
1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去
6 j. F6 q1 S5 D& c4 S掉不满足条件的排列。 , n( m" S9 c1 r
2.程序源代码: + n  y! G/ U/ K
main() { 8 D4 m/ q$ `, q9 G
int i,j,k; 9 Y% ?" K7 j* c
printf("\n"); 7 ^" W- e: J+ _9 r3 f# I/ }2 _
for(i=1;i<5;i++) *以下为三重循环*/
' O) c8 y+ P7 Y; L# W" F$ Q" i0 kfor(j=1;j<5;j++)
6 {: J; R- ]% G% z$ I) Z" [+ {/ {) Mfor (k=1;k<5;k++) {   y& s# M* T7 m: S
if (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/
. D5 ^2 s8 X" U. F. Dprintf("%d,%d,%d\n",i,j,k); }}
. T0 ~' E' w# z+ z- [# f============================================================== ! ], e0 }" [$ I7 N3 k8 x2 g$ E& J7 d
【程序2
. f& V$ b, i6 C, `! g1 k6 u8 [题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
% q* R! ], o. {! ?10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 ' E0 ?) T( J7 q9 A' n
7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于
7 e) U; ~+ W- l) N5 U40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于 3 n# Z, Y& e0 L
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
( n, A  S( `/ W  \" F1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
: ]+ f( q. H. d% L: H2.程序源代码:
: ~4 R: F: L/ e. D/ omain() { ; b6 _5 K9 d2 l% k  s+ S: X
long int i;
& |) `" p6 L% \8 C6 L! N9 R) Fint bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
4 J; J7 z1 t0 W( C6 S1 Sscanf("%ld",&i);
; K6 q1 V( z6 ?4 F& z6 A# ^& ]bonus1=100000*0.1;bonus2=bonus1+100000*0.75; # |% _8 o) B( ?' y! a
bonus4=bonus2+200000*0.5;
. h" ~8 v6 e* _+ @: q) abonus6=bonus4+200000*0.3;
+ s4 A: J& P/ Z& a% i3 L5 Y8 @: Dbonus10=bonus6+400000*0.15;
3 w2 ?" K, L# f1 i8 X; sif(i<=100000)
: x! X! R/ g% `* vbonus=i*0.1; ) ^7 W% B1 c  e
else if(i<=200000) - Z, `5 w- D& a/ |& ]
bonus=bonus1+(i-100000)*0.075;
  e/ Q, }. f$ aelse if(i<=400000) : y& r% O7 |( ]& M! q# l2 |
bonus=bonus2+(i-200000)*0.05; " i3 r, Q% X& r  p7 c
else if(i<=600000) ) A* ~# ^, x6 f1 ?! `, R  A
bonus=bonus4+(i-400000)*0.03; , C& J1 w$ [) ]' z' a- f1 K" w1 S6 s6 P
else if(i<=1000000) ) z$ k6 ^# d* l, e
bonus=bonus6+(i-600000)*0.015; . g+ D3 [3 h5 j% a7 E" C( a: @
else 6 [# h. u1 A; f& i3 i' k8 b2 Y
bonus=bonus10+(i-1000000)*0.01;
/ m3 f3 h! q4 W: rprintf("bonus=%d",bonus); } 6 L& L6 M# X% a0 i& c# V
============================================================== ) O. o- v$ N" P& Y3 l
【程序3' d- H4 l6 b3 f
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
& E( ^+ V7 B+ w& G% F- H! Y: w( ^0 y1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 5 E, X. O$ j, r7 y: [, e
的结果满足如下条件,即是结果。请看具体分析: 3 n. Q3 \0 u6 N3 l
2.程序源代码: * }- b/ P% [8 J1 _3 ]
#include "math.h" 9 w0 {$ m. D" ^
main() {
# P: ~+ g7 _+ Clong int i,x,y,z;
0 G& o+ W3 e3 k# u2 Sfor (i=1;i<100000;i++) 8 _  C8 m) _; k$ p4 H8 s
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ ! G* O6 [* h. c5 R7 H
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
+ k! E: z* M; o5 R, V" d' Pif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ 1 Y. D) J; l2 H+ v6 S9 Z3 I
printf("\n%ld\n",i); } } ( J/ s, W0 y7 }0 r- s: R
============================================================== 0 U# k+ n  P7 D; D; B5 W( x
【程序4! M- t  }4 c5 H% m! J  b1 v$ T* ~( M5 @
题目:输入某年某月某日,判断这一天是这一年的第几天? 8 G  R3 }6 }  w# G+ I: F% p
1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
( Z* c; z  W8 U  W6 P情况,闰年且输入月份大于3时需考虑多加一天。
$ M' z, C7 v0 \4 X' z! z2.程序源代码:
  p% y! U7 K, Z* m6 X0 cmain() {
1 x: s7 g1 W5 D) B1 N- O5 j/ ^: e: Uint day,month,year,sum,leap; 0 ~8 v0 ?+ @0 z
printf("\nplease input year,month,day\n"); 5 |; e, d# E5 v% j
scanf("%d,%d,%d",&year,&month,&day); ) R% p  K. E$ ]" I. [
switch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break;
7 S( Q, x: j; jcase 2:sum=31;break;
8 T6 g& `( [5 H8 n. `case 3:sum=59;break;
- q) w' v( e" J$ X5 |case 4:sum=90;break;
) X7 t5 O  t" v3 E) o, S/ A: U" E% P& S5 ?case 5:sum=120;break;
! n7 D* H2 l* o; h# bcase 6:sum=151;break;
3 M5 ~( h. K9 B1 q/ d1 d, ?0 C7 n1 Ocase 7:sum=181;break;
% ~+ S  M4 r5 X9 S: ~" U; Y/ E$ Ucase 8:sum=212;break;
' i' M( o1 \6 i$ Qcase 9:sum=243;break; . R' |  [3 M1 h. J( M* U. V3 H
case 10:sum=273;break;
  m; d$ t+ R% Gcase 11:sum=304;break; $ e- C- G* f. g  p! Q, y
case 12:sum=334;break; 6 h  A2 J/ Z3 x" u) U
default:printf("data error");break; } 1 ?: I) _# [6 q1 V& w4 x
sum=sum+day; /*再加上某天的天数*/ 2 E+ \( }6 g+ b5 X7 ?& R
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
+ A9 w9 z' h- h' f8 yleap=1; 3 ?& Y  ~2 |* @" c* c
else " b7 ^, F. V5 x* u$ h+ X% I6 h
leap=0;
9 Z0 i1 A( ~3 p1 @0 m7 ]: f+ u( Hif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
* k- Z- h9 H2 Fsum++;
! U8 e9 ^- d( _* |& ~% ?printf("It is the %dth day.",sum);}
. t- \0 n6 Z2 r# N3 Y& W==============================================================
* j3 z: z; |. z# u: \1 |) r% _7 `【程序5# x& i  Z7 @* v/ Y0 R2 ^% n5 [6 J9 [
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
) B! _: l/ l) @, F' J1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换, " X- I, C( y6 J  z
然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。 . N* Z3 c( P/ n' ?7 g0 }1 i
2.程序源代码: - M# q3 l* F* T" {3 r
main() {
( h$ p7 ]8 ~, x3 `* m' ]int x,y,z,t; * o& u7 c0 e5 Q+ ]: ?* J
scanf("%d%d%d",&x,&y,&z);
7 ~% _. p+ u9 J" jif (x>y) 0 K6 N" k5 J$ g1 O  f
{t=x;x=y;y=t;} /*交换x,y的值*/ * i/ b) ~, z! i6 E! f4 F
if(x>z)
; K* b& n9 w" g1 {" ~; U1 N0 `' g* h{t=z;z=x;x=t;}/*交换x,z的值*/
. Y- l& Y) {7 u0 Mif(y>z)
/ T7 s, l4 |( Y/ |! W{t=y;y=z;z=t;}/*交换z,y的值*/ 9 q9 U$ I# |. z4 z) |5 D5 t! |
printf("small to big: %d %d %d\n",x,y,z); } 5 j# ]. R% A3 m$ h

! x. z" o$ ~$ G" U- J! l
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 13:12 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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