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

C语言经典算法100例

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
【程序18 R$ J: M5 d5 g1 D
题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 4 [5 W% n  S, F3 ]7 V2 b, H& O
1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去 $ E" i1 `! w4 C  c0 q! D2 y- A
掉不满足条件的排列。 4 m+ A9 K* I7 l6 R8 L8 m. Z! f
2.程序源代码:
7 S7 Z9 a5 |- r- V1 ?9 ?main() { : u4 ~3 D: y1 L3 {/ W1 u- h
int i,j,k;
, J& {! D8 L9 V2 y3 `5 pprintf("\n");
3 T) Q9 H; d* i4 Y8 s4 |for(i=1;i<5;i++) *以下为三重循环*/ 2 G5 i4 C# W4 G7 U
for(j=1;j<5;j++)
9 W8 ?" o& U( A5 nfor (k=1;k<5;k++) { - o( u: u# R" c+ U  S% D
if (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/ 1 H8 a1 X$ n- N. d
printf("%d,%d,%d\n",i,j,k); }}
! ]: \! `7 C6 J============================================================== $ B9 G6 ?! O  E4 V- A4 S+ L3 ], [1 k
【程序2
3 m: z2 A% q2 t9 Z+ W题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 * T+ N# N2 x$ `6 T* R
10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
5 E1 b' u# e: T/ \. `' U7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于
- e5 Y* J: R7 P40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
$ k( U& ?. m# w) Z100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
( D! O+ m$ D& @2 a0 Y- \& k1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 6 Q" q3 m$ @- J% c* ~  {' d, k3 S
2.程序源代码:
9 y" }0 f* ?* u% R  h; Pmain() {
* a. f' |) X: P* k# k0 T5 W( _3 Jlong int i; / Z! ^7 d+ H7 }' J: N0 p
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; ; q7 s9 q/ Q( X) ?
scanf("%ld",&i); $ T$ P! C" Z9 @0 l9 n* U' J* u  _
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
! P9 U# ?/ W) \5 z9 Nbonus4=bonus2+200000*0.5;
9 y9 c9 Q( A* f- q* {bonus6=bonus4+200000*0.3; , U+ ?. b; J$ [/ t5 J; T" F9 M) w5 F
bonus10=bonus6+400000*0.15; 8 N8 _1 m7 G! J( H) L0 f7 y& g$ d
if(i<=100000) ; c1 g: i4 f  B6 ^* V  \
bonus=i*0.1;
6 J* s8 ?/ |: a" b5 T3 g( Selse if(i<=200000) * h1 s' j; T" F, h( J0 @/ ^. r
bonus=bonus1+(i-100000)*0.075; 5 d( a. A: v* _9 R& Z2 J% F
else if(i<=400000) * x2 A' z" V& N5 l3 b5 ^4 G
bonus=bonus2+(i-200000)*0.05;
7 V5 w/ T; b# ?  C/ w: ?else if(i<=600000) ! W. M6 ?4 o) q
bonus=bonus4+(i-400000)*0.03; ) x, u4 a8 q7 a$ n, D
else if(i<=1000000)
" ^) b9 ?: S2 V4 h3 `5 kbonus=bonus6+(i-600000)*0.015;
4 h) v$ n9 [, Ielse
" e* v6 T7 z6 Sbonus=bonus10+(i-1000000)*0.01;
- V7 X8 E; D6 |6 G* G- Q5 S/ u( b1 [printf("bonus=%d",bonus); }
# W/ n5 P3 O  U$ [==============================================================
. Y5 o# g/ ~4 J7 {【程序3
" D. r5 |# W/ b- Y$ @题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
' P; Q) c/ J2 n' F, u3 v0 h1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 , ?( p0 a) o- R; j9 ]
的结果满足如下条件,即是结果。请看具体分析:
% E* u5 Y5 j( n8 g$ Q2.程序源代码: ! M% I1 M5 l6 ]' p
#include "math.h"
2 l: \4 k" P7 rmain() { + L# O0 c7 K& ~
long int i,x,y,z; 9 W* t, F) r7 {) w
for (i=1;i<100000;i++) " j! h! o7 r4 ^- ]
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ . ], V# a) ~9 O( c; ~3 ]
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
% ~+ ?( R3 y8 e0 O* A" zif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
3 T; [3 s& p6 B2 ]- k3 eprintf("\n%ld\n",i); } } 5 o0 g2 |' R- ?: d$ p, c$ M5 G5 _# {" @
==============================================================
2 D8 l1 _- A3 W$ ^【程序4
. y/ |. i. W2 D7 O2 I题目:输入某年某月某日,判断这一天是这一年的第几天?
. j- K( {) ^7 \" P1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
/ I/ j- d3 M2 M情况,闰年且输入月份大于3时需考虑多加一天。 3 `# W2 z, T% i! {' v
2.程序源代码: 8 l9 T1 w) V2 U& q
main() { 7 A% H9 s- s5 A
int day,month,year,sum,leap; : L% K/ I2 G  H: R
printf("\nplease input year,month,day\n"); / \* L" X+ i5 Q- e* S' p
scanf("%d,%d,%d",&year,&month,&day); 3 P& W! T1 n0 Y3 f, Y' e
switch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break; % C* `# J) I6 d6 H
case 2:sum=31;break;
6 V0 j+ B5 l+ o$ j+ B( m1 mcase 3:sum=59;break;
: r8 e- r0 W( d7 F0 @case 4:sum=90;break;
; r5 H, ]: U5 I! Ucase 5:sum=120;break;
4 Y+ Q5 G- j2 ]- Z/ t" ]case 6:sum=151;break; 4 Y6 O* a- }4 ?4 Q6 a$ q9 T
case 7:sum=181;break;
$ C) t- p6 b2 q9 `$ W$ J$ P0 ocase 8:sum=212;break; - @5 l9 v8 V% ?! P) d- t
case 9:sum=243;break;
$ Q0 Q2 ~  Q2 e( X7 P* K2 O1 Icase 10:sum=273;break; + V% O3 w. N( \! o+ e* c; {9 t
case 11:sum=304;break; & v' c6 ?3 F0 E- v% V$ a' F
case 12:sum=334;break; . ^2 ?4 l+ _" G4 e" H2 H$ T4 q, l
default:printf("data error");break; } $ P; F0 ^. t$ B4 {/ x
sum=sum+day; /*再加上某天的天数*/ ; h1 x4 K2 U% o# ]
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
6 h9 t" c6 }1 N/ W0 lleap=1;
1 ~. G9 G6 y+ G; s8 V* t3 relse
% _& e& M4 z" E) x+ ^4 O1 W/ Xleap=0;
$ e& E& w6 S3 xif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
1 _9 f/ X  O1 W' a+ z* l  _* Csum++; ' ^8 H/ M0 \2 S' c1 e% Q
printf("It is the %dth day.",sum);}
, \# j; u  g$ ?: I==============================================================
. N4 }) ]. @1 f9 I【程序5
8 d4 O# r# Z3 L) a( a' K3 E' e题目:输入三个整数x,y,z,请把这三个数由小到大输出。
9 P6 f$ O  e7 {* F$ t+ {3 e5 u1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换,
% ?4 h  }9 i% b) b; u* N" p6 m& r然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。
. H( b- f+ w' C+ Y; n' l3 Q3 g2.程序源代码: ' \9 z# N1 ?" B/ ~
main() {
0 L8 u( o& L7 y" B1 sint x,y,z,t;
) L8 }" H* _1 l$ y) B/ Tscanf("%d%d%d",&x,&y,&z);
; K. u$ m% t- ^, f6 ?if (x>y) 3 K' x8 w% F3 r: F5 t; \& p
{t=x;x=y;y=t;} /*交换x,y的值*/
$ _! I" j+ ^6 dif(x>z) , m% D( k- n% h
{t=z;z=x;x=t;}/*交换x,z的值*/ 0 f! c! C0 [% W5 e7 Q% b' {
if(y>z) ! H  d0 z6 c" ~) _( r' [% L
{t=y;y=z;z=t;}/*交换z,y的值*/
  n9 v- q! a2 G; i8 yprintf("small to big: %d %d %d\n",x,y,z); } 1 q9 C1 Y: S" C5 i! @
1 L) D9 n+ k9 y7 E6 f
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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