找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

C语言经典算法100例

[复制链接]

114

主题

136

帖子

1000

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
【程序1% M2 k5 y: ^* N* H2 j: \6 Z
题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 7 q+ n+ u" x+ _1 x2 f9 i
1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去
- s- \& U3 Y) v5 j" v; `6 a' `6 ]掉不满足条件的排列。
- W2 L4 x$ W7 f* w: l2.程序源代码: 3 `  @( j- |, g: C+ Y9 f' D& C! p0 e% W
main() {
- \; Y* {5 }; Kint i,j,k; 8 ~" r( K$ b/ Z9 ?
printf("\n");
. J2 H, P4 c$ R+ {( m! L; Qfor(i=1;i<5;i++) *以下为三重循环*/ * @7 u! j9 o) V! l7 l% [# B9 A
for(j=1;j<5;j++)
' n3 s6 V  C& M0 @2 K) h4 xfor (k=1;k<5;k++) {
: f- b$ V8 I+ v' d% C0 E# B" lif (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/ * ^! K: q' _* z, G
printf("%d,%d,%d\n",i,j,k); }}
  n# t; s7 D  T9 }==============================================================
, `2 H6 t1 T6 R+ P  m$ v【程序2$ s1 t& `! H! ~( @
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 ; ~$ ?6 @; @9 t. ^! P
10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 ! t2 J# k3 v$ G' h
7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于
+ H( _7 |/ F9 i* s) V40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
" f# Q. Z- t* j9 E100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 9 T% ?, d/ W$ q0 b
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 6 B( e* V+ t* {" t, j: e5 U9 s
2.程序源代码:
+ U. R7 Q5 O+ B& D% zmain() {
) i' G; Z  S) ^4 t& olong int i; ; L' S4 `; G3 E
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; 6 `, C# n" ~9 B! Y. r# s3 _
scanf("%ld",&i);
$ U( W: e1 w3 i6 R  Ubonus1=100000*0.1;bonus2=bonus1+100000*0.75;
; _4 _/ o. e3 w& d4 Obonus4=bonus2+200000*0.5; & [4 @! k7 |) m: W( K6 |/ q1 w
bonus6=bonus4+200000*0.3;
# x, b7 W$ Q# |: Mbonus10=bonus6+400000*0.15;
* v, b" T+ Y+ o5 Q9 q% V( K  u+ d1 q/ Fif(i<=100000)
1 n+ w1 X) s* l: t; z+ Vbonus=i*0.1; " I* `) P( f2 w! @# Y
else if(i<=200000) + M8 {: J) h8 h. L& T1 E& M
bonus=bonus1+(i-100000)*0.075;
" B# V) G5 \$ {7 Melse if(i<=400000) , J5 j$ _" }/ k/ m1 Y0 {% v
bonus=bonus2+(i-200000)*0.05;
4 Y; V: V3 d8 ^else if(i<=600000)
- ]2 s8 f0 I( ?- Vbonus=bonus4+(i-400000)*0.03; ! t- l% D; @% ~5 Q
else if(i<=1000000) + s$ e1 d" ?, t' ]9 [+ d# ]7 ?6 s
bonus=bonus6+(i-600000)*0.015;
0 K% V+ S* L7 Yelse
  P' J$ z. w" V$ @/ S' h+ jbonus=bonus10+(i-1000000)*0.01; # n% G$ ?. [, u( y) ?7 C- E! ~5 b
printf("bonus=%d",bonus); } ( ?7 M7 `0 W+ {2 Q! a8 l1 S
==============================================================
: A# H- F  n/ F2 {【程序3
1 p# J$ a2 g* `, a4 b% Y题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? . z0 A0 \5 k3 f! k
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 . c. }" j) V. e& ?0 U; m
的结果满足如下条件,即是结果。请看具体分析:
$ e. |! Z( M9 z# C2.程序源代码: ; X" e, y- Q9 ~% y5 C8 P$ w0 X" a$ m
#include "math.h"
+ p8 R, c( t' X/ U( @main() { . W5 ~! k' F" {# ^
long int i,x,y,z;
/ x" b) o$ u' o4 k. c5 ?for (i=1;i<100000;i++)
8 P9 J% M, Z8 f3 _# y; S, e{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ ! ~( n8 c6 _6 |* [1 g0 u
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
0 o. S5 V$ L  p! w9 `& z" t% ~. iif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
& u6 L: {. U8 {5 Sprintf("\n%ld\n",i); } } 6 A2 l+ [* ?$ l6 X* _
==============================================================
3 ]9 J1 ]0 u) ~- x3 ?4 `【程序4
- R+ z2 |* J( q( Q$ S题目:输入某年某月某日,判断这一天是这一年的第几天? & N  K1 `4 y3 i6 d4 k
1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 & J4 I- y5 m+ x4 @4 u: g" {
情况,闰年且输入月份大于3时需考虑多加一天。
; q' o$ b7 X; y8 I# Y8 {2.程序源代码:
3 v! t( K# c) Y3 s) Pmain() {
1 L% ~9 A0 }' K9 Fint day,month,year,sum,leap;   E( _3 y5 J2 X% \& n
printf("\nplease input year,month,day\n");
9 C6 F/ N* V" y/ T" I' ~2 a" s( sscanf("%d,%d,%d",&year,&month,&day); : u0 u4 i( s$ H8 d$ K
switch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break; 7 w6 D" v) `; I) p& W9 t3 S# }
case 2:sum=31;break; 2 c4 B; ^2 }7 H5 m; \5 g
case 3:sum=59;break; 7 Z# [3 {5 T0 x
case 4:sum=90;break; 9 j; ^5 g) T2 W! P
case 5:sum=120;break;
! y- ?7 C$ l2 dcase 6:sum=151;break; , Y8 t0 R& f% Y& G7 W. [6 q
case 7:sum=181;break;
/ k- T- u6 G8 l; s0 `$ [case 8:sum=212;break; 4 L4 z% G# R: j9 s5 H& P6 i. m
case 9:sum=243;break; ; n* n: U. I. G5 m  u" s* w/ O
case 10:sum=273;break; : Q; A* K6 x, y+ j6 X; g
case 11:sum=304;break;
* A0 r5 ?% V+ i8 m6 T6 G* d) Vcase 12:sum=334;break;
. W& R8 j- x& g7 h3 R9 ydefault:printf("data error");break; }
6 \; u9 K% {* r0 qsum=sum+day; /*再加上某天的天数*/ $ [6 N, c" z/ L9 j! ?2 p+ d
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ " v) _9 d5 H- a2 t" O' M( {' I
leap=1;
* r! B" T+ i+ belse
+ n- ~* ]; {$ g7 M' K  {& |$ `leap=0;
3 L( |  p, l" E/ T1 bif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ 1 Z) n% F  `5 j5 K, J; g
sum++; ' T1 k6 E; {$ e& ?
printf("It is the %dth day.",sum);}
. K3 ^; t: z" _' k============================================================== ! w0 r- i6 R. a7 G1 ~; a
【程序5
- `; J( r, t  T, R9 ~题目:输入三个整数x,y,z,请把这三个数由小到大输出。 : t$ n$ n9 q7 R* r/ }0 C
1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换,
6 N! }* y3 S5 E8 K( O: y2 R$ E然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。 % I$ N& g' }6 Y& [3 U8 [# G
2.程序源代码:
, H& T2 A& P* Z1 l7 ?* `- C8 h9 P7 Amain() { & i9 ]  w) S7 ~! Q4 r
int x,y,z,t; - V/ {: w0 N1 P
scanf("%d%d%d",&x,&y,&z);
% J- I) T4 ]2 M, X, A6 o; cif (x>y) ! _9 B6 x& d: p: a5 D. a& J
{t=x;x=y;y=t;} /*交换x,y的值*/
# h9 [# X4 k* ~% j2 w' _if(x>z) 3 G( x, E& A& H' C( L, J7 G1 j
{t=z;z=x;x=t;}/*交换x,z的值*/ , G# V6 j, k) ]2 ?* U' p0 w
if(y>z)
( U/ U. N/ M/ _# `' z{t=y;y=z;z=t;}/*交换z,y的值*/ 2 n- t& I. B+ W$ u0 Z4 T
printf("small to big: %d %d %d\n",x,y,z); } 0 C. }8 Z9 f. b  R( k& Q
- J0 |5 |' D" K9 k" J+ t$ Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-19 06:14 , Processed in 0.053483 second(s), 33 queries , Gzip On.

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

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

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