找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

C语言经典算法100例

[复制链接]

114

主题

136

帖子

1000

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
【程序1
* [0 e4 W" X; Q2 O题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
+ l% b3 B6 g3 w& Y" v1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去 , [2 d! V2 Q; }- d
掉不满足条件的排列。
: v& U- X- f" Y' q( ]4 t  e2.程序源代码:
- ]) Q3 x- n8 ^  f: Emain() {
7 x8 @6 r; J3 |1 t# |int i,j,k;
$ Z, x2 v% e1 h( o+ w2 bprintf("\n");
0 a/ F, P# [, ?for(i=1;i<5;i++) *以下为三重循环*/ 9 u8 e: K; S. o0 W4 B
for(j=1;j<5;j++) ) `1 c" n8 P7 G: O+ O
for (k=1;k<5;k++) {
: g; T. h. D2 z2 s9 b4 ^6 ]. g7 y! Lif (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/ " h) _0 B+ _" g+ ^
printf("%d,%d,%d\n",i,j,k); }}
2 ?- t, |+ Y+ n* q- x* g============================================================== # s( a- ?4 `, R7 h/ J; a6 Q/ X
【程序2+ Y& D/ |3 H: Y2 Y
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 * ~; p3 B+ R1 k9 j8 W' F
10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 3 _; P1 v/ _) O. V! g5 \
7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于 4 B0 Q! P" L, y
40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
7 p* x& O$ C+ n+ J4 L" |100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 2 g- I2 ]0 d, n/ X
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
& }& L' O1 t* D8 i6 b2.程序源代码: + ]& h$ X% O  c4 l2 C6 G
main() {
/ y8 }, U1 I5 Z/ L( Llong int i;   N) M) |4 b7 T/ P# K
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; ; b# [1 b6 C9 D7 I+ O/ `
scanf("%ld",&i);
( m. m- W! @6 w9 p8 @7 l8 Xbonus1=100000*0.1;bonus2=bonus1+100000*0.75;
  o; p; t2 M) {bonus4=bonus2+200000*0.5;
0 g) Q8 H2 G0 ubonus6=bonus4+200000*0.3;
# T* _+ ^  n/ W' Y; lbonus10=bonus6+400000*0.15;
! B3 S6 ]1 e( nif(i<=100000) * V* i, E/ n9 ~) }5 o/ S
bonus=i*0.1; 4 a1 ^7 o# |7 s5 g! J% o6 A
else if(i<=200000)
: u7 s" ?+ l8 N9 R) ?8 ebonus=bonus1+(i-100000)*0.075; 9 L$ h& _) F  F9 ?
else if(i<=400000) . S$ @: `. o0 [3 q
bonus=bonus2+(i-200000)*0.05; ) }, L3 p0 _  p. Q$ W
else if(i<=600000) 6 S! Q* \! e+ G$ ?3 u5 \& _. d
bonus=bonus4+(i-400000)*0.03; , k7 R% E  d. }  U' M: T
else if(i<=1000000)
4 F0 Y+ K- q  }bonus=bonus6+(i-600000)*0.015; 8 f% ^0 E& g6 |  A& K7 w6 ?
else 2 i7 G" [( {# Y' _. x9 h
bonus=bonus10+(i-1000000)*0.01; ; G# e# @( x3 n( i9 X+ X9 Z
printf("bonus=%d",bonus); } $ a8 x( ^; ~5 ^% X$ W7 z1 X* i
==============================================================
) @1 |+ R. c4 b% X" z【程序3) `- U6 y9 h) ?0 v4 Q5 r4 N: Y
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
& s9 \  H2 ]( B  Q/ o1 W1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
% w6 \8 V$ @3 q0 B+ F8 U的结果满足如下条件,即是结果。请看具体分析:
7 ^$ u. C2 W+ w$ f+ J/ e2.程序源代码: % i- O% Z" l. n/ |( u& v
#include "math.h" 2 k4 X6 j# t) C+ [
main() { 6 w8 m0 {3 ?- Q4 z
long int i,x,y,z; % o8 P5 J; m1 r: y$ E5 U: X/ B
for (i=1;i<100000;i++)
0 f8 z' O# t8 m" i{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
5 x3 X) h! _% `4 ~3 I1 Ry=sqrt(i+268); /*y为再加上168后开方后的结果*/
0 i. m, @" Y$ T* ]' z- F( [if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ * r! y1 i& m! j, @
printf("\n%ld\n",i); } }
( w( h! Z7 w1 y- ], R7 |* d============================================================== ' b8 V$ ]2 j. d) s
【程序4$ S2 z1 p" b0 P. w
题目:输入某年某月某日,判断这一天是这一年的第几天?
( L' u3 }* r/ F1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
! z8 p" O% v/ p) p情况,闰年且输入月份大于3时需考虑多加一天。
; P" ~9 S: P4 Y) h  J/ x2.程序源代码:
" \& W# a# ^8 {main() { 1 w; x1 z: i/ V6 T% b/ W; }
int day,month,year,sum,leap; 6 ^3 l! _: Y2 f- W9 g
printf("\nplease input year,month,day\n"); % _( j+ S" E* I4 r
scanf("%d,%d,%d",&year,&month,&day); 7 o5 ]: N* h; }6 ]/ q' Y% Y" b
switch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break;
- m5 k, E4 j" O- |+ Ccase 2:sum=31;break;
7 @2 o( H" I7 m: f6 ~0 E4 Tcase 3:sum=59;break; 8 L7 e9 z3 L( `
case 4:sum=90;break;   M2 {; _$ e! M
case 5:sum=120;break;
: M: S8 G& I" O$ a4 @7 Fcase 6:sum=151;break;
+ y3 E( m* B# X& w( bcase 7:sum=181;break;
' s7 P# T' s% ?+ R  Pcase 8:sum=212;break; 3 e- V& {$ v$ t0 v) R& d7 ]% j
case 9:sum=243;break;
1 Z4 c" M) {  F8 e3 K( ]5 D  \* vcase 10:sum=273;break; ( J5 o* l, I- Z; U
case 11:sum=304;break; 1 b- M7 h5 G0 P( |! i; V4 Q
case 12:sum=334;break;
# e! ?7 ?" Y/ edefault:printf("data error");break; }
: A4 f/ ^/ N) ~; L& E" Jsum=sum+day; /*再加上某天的天数*/ ! X; P/ C. |- U" W
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
% g* |0 a" u1 h$ {7 [# Cleap=1;
( S. L  [! v3 ^' \, n+ S( U- ]# H/ r9 ielse
8 F2 M$ ~6 P: {) E/ Qleap=0;
1 Q' A2 K9 [% E- I- z; }if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ " G8 _; y$ ]& R/ h' O; s
sum++;
, H3 q5 k- J9 K/ mprintf("It is the %dth day.",sum);} 8 w/ b$ }! G0 b1 p$ R, w
==============================================================
4 m7 f, D. }% ~: s' d+ |" q【程序5
: L% [: a; h/ x: u8 }8 t$ F题目:输入三个整数x,y,z,请把这三个数由小到大输出。 ( X( L7 M5 _- \3 E3 z1 M
1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换,
) Y1 j7 G- W: P9 X8 J' B然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。 / D. m0 h8 L4 z) Y$ y
2.程序源代码: 8 l  M5 i2 R9 R6 ^4 ~
main() {
" L% S) L7 ~) Z* m: G, Tint x,y,z,t; % p$ k7 ~& j$ ~3 F3 g% ^: w
scanf("%d%d%d",&x,&y,&z); 8 q4 ?  H0 {* t0 Z9 t0 s/ P! h
if (x>y) " f- X1 H% m1 O2 m
{t=x;x=y;y=t;} /*交换x,y的值*/
$ m7 V- ~5 ?) J* cif(x>z)
1 X) E7 c+ v1 x. O{t=z;z=x;x=t;}/*交换x,z的值*/
1 Q0 W- M6 V# t  S+ Jif(y>z)
4 {/ X: q7 r  y1 }: T{t=y;y=z;z=t;}/*交换z,y的值*/ + O- B; r5 A$ S% T
printf("small to big: %d %d %d\n",x,y,z); } " N- x3 F* Q1 i8 b  @
7 d) c7 U0 U* s4 M# D! r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-20 06:07 , Processed in 0.107351 second(s), 33 queries , Gzip On.

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

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

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