找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

C语言经典算法100例

[复制链接]

114

主题

136

帖子

1000

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
【程序1
( C' h+ o* s8 d8 [题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1 H& j8 }6 s0 ]6 U  u; i" J& J' b
1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去 - g3 O3 P- J8 A+ H
掉不满足条件的排列。 . p2 v& o  |( [! v' _; w; M, K8 t& b
2.程序源代码: . _3 U: p5 O+ m7 `- [
main() {
/ }* }- ]' ~5 K* Nint i,j,k; ) G; z' Q4 ]. I3 w, a
printf("\n"); ! H. {  U) c4 t# e7 p* S3 X
for(i=1;i<5;i++) *以下为三重循环*/ " ?( y8 d% e. J' N/ s4 |( L
for(j=1;j<5;j++) ' |" ]% f9 K( u% O4 j0 b+ ?
for (k=1;k<5;k++) {
* A2 x3 ]- R: R, Kif (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/
' U6 e1 c) ?# q  h1 H; l0 ]printf("%d,%d,%d\n",i,j,k); }}
) F. v# D; d4 a============================================================== : t4 [" N  c- ]& [) e0 z( i" A+ O
【程序2
- m+ o3 a, r5 ]; D& g, O题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
! U- u& }* _$ }) u9 z10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 8 @+ ?: d- J+ }* |) }* ?) H, X9 D
7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于
. V* r8 ]$ \2 o40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
! U+ ?! ]* c' q) S( R( o9 Q/ U100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 6 f: {9 f4 c- G" H: B+ P3 u# g
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
' K* X# n+ u& i) ^, L6 [2 G2.程序源代码: & M5 B* O; }2 }( h
main() {
2 z0 I" Q, Y4 f4 ?long int i;
* y/ h- j7 c9 v0 _- Y# g! [int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; + e: w( }! _' P$ D0 F" r* A2 D: S
scanf("%ld",&i);
" o6 l6 R" b  ]$ qbonus1=100000*0.1;bonus2=bonus1+100000*0.75;
9 @9 a, |* Y4 Fbonus4=bonus2+200000*0.5;
, _% `# p# D1 m; k& ~bonus6=bonus4+200000*0.3;
; v9 \6 ?; _5 o4 t3 H; abonus10=bonus6+400000*0.15;
' k- D" R* C" U& a) N# zif(i<=100000) * y& Z  g6 E3 ?2 g1 V/ h0 ?) L
bonus=i*0.1; ! v% N5 p" ?+ f0 N6 D" k
else if(i<=200000)
9 Z4 D5 M! ]5 mbonus=bonus1+(i-100000)*0.075; " z# p6 V* y" Z
else if(i<=400000)
( n/ k% f8 k, j+ e- f# m; Sbonus=bonus2+(i-200000)*0.05;
! i3 a' k* X. W+ Lelse if(i<=600000)
' u2 s. C' w$ Q% Dbonus=bonus4+(i-400000)*0.03;
" e4 _4 x( p( ?' \6 Qelse if(i<=1000000)
  @- t- ]! @4 @$ hbonus=bonus6+(i-600000)*0.015;   |5 C" {( f/ |; A( Q6 G3 ^
else : g2 K+ [) `! ^4 u8 s2 {) X$ ^
bonus=bonus10+(i-1000000)*0.01; + P& }  @" a4 \8 p; |
printf("bonus=%d",bonus); }
. A( K5 L: n6 ^; I============================================================== 1 [! J6 L! g" ~2 M' m9 d# _3 c
【程序3# z; L! M. C. W/ n# @. z% h
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? + M: N$ @% Y; B8 f& R9 p
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 $ T5 Q5 p7 L) W: d9 f4 R3 D3 D
的结果满足如下条件,即是结果。请看具体分析: # L' c( u2 _+ B, Y9 c8 y8 G* [
2.程序源代码:
1 t3 _4 ^& c* e  z& ~4 V6 i#include "math.h"
9 ?) s/ C3 p6 J/ Dmain() {   v1 r* `& ]4 p$ \+ c5 x( b
long int i,x,y,z; % N+ K/ _+ p8 U0 j' u4 g
for (i=1;i<100000;i++)
0 W5 R( G( a$ Z5 s; m{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
- K% J: C4 T$ x" c$ @y=sqrt(i+268); /*y为再加上168后开方后的结果*/
- J$ }( n; G( d+ [+ D7 Xif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
0 Z7 O6 @6 S4 j2 M- [. T; R, \printf("\n%ld\n",i); } }
4 q) ]& o& s! s. h, [============================================================== * Q8 j% H2 }( R/ R5 e
【程序4
9 w( `: N& a3 d% {题目:输入某年某月某日,判断这一天是这一年的第几天? + n' L) F  ?; l& W. x  M6 ~& R
1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 0 o) C/ i3 j& k  I' \6 j* L
情况,闰年且输入月份大于3时需考虑多加一天。 8 |) ]  u( x9 x5 ~# y; I
2.程序源代码:
5 l, h8 s% K; ]3 F8 l8 X2 k6 r0 nmain() {
7 B% H' j* g# W6 lint day,month,year,sum,leap; 7 h/ M# y9 w. u1 r. }6 L. r
printf("\nplease input year,month,day\n"); & g" t, E- U3 i0 `
scanf("%d,%d,%d",&year,&month,&day);
! y  b; O* \6 o' L# Hswitch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break;
* x- m. m2 O* e' [: W, \) k: G6 jcase 2:sum=31;break; / Z) m* x2 p+ w& D
case 3:sum=59;break;
: b! S0 F- Z" I& \5 |2 Ncase 4:sum=90;break;   g  X- J+ K, J: x
case 5:sum=120;break; 2 A  {/ K' N2 b6 |1 ~
case 6:sum=151;break;
  C9 H3 u1 b! |. W3 U& G% L0 ~case 7:sum=181;break; : h' g& v7 h' H& u
case 8:sum=212;break; / U# v5 H1 I/ h1 C3 W
case 9:sum=243;break; , y; w% k" X/ B
case 10:sum=273;break;
0 Y7 I$ Q9 f$ d1 H! \* qcase 11:sum=304;break; 0 M: K6 D& s! b# K
case 12:sum=334;break; 9 c. Y, s* p* }! S3 h5 J+ b* ^
default:printf("data error");break; }
9 [" ]  T1 z" ?& jsum=sum+day; /*再加上某天的天数*/ & D( }4 k2 p0 g% C: x( F
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
% X& `  s4 U$ m5 W4 K4 rleap=1;
6 X* e7 k2 ~' {% g% B/ ?else , h: ?* d$ M- H7 W8 ~3 y; u' u
leap=0; " R4 W- W/ w8 v: A' [
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ & c# l( G; ?+ O6 w
sum++; & @( ]1 b6 d, T9 r
printf("It is the %dth day.",sum);}
4 l4 \% }9 L- H7 K$ g- l============================================================== 1 ?# K8 r1 W4 T) S& E8 ^
【程序5+ Q$ J4 r. o  x3 }9 d9 _
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
& V( T$ z4 [: n1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换,
" K4 R6 F# w; Z: Z4 ~9 w然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。 # g. F$ I, D: p4 o" v
2.程序源代码: 4 x+ R3 F3 `% J" J
main() {
4 ]% Q3 c* a5 `int x,y,z,t; " s8 m! [* s# F; l" ~  f! f* }
scanf("%d%d%d",&x,&y,&z);
" ~6 {, d/ j4 nif (x>y)
& d: f  a/ N; M1 a{t=x;x=y;y=t;} /*交换x,y的值*/ ! ?/ v6 z& D4 j- ]0 ~4 S
if(x>z)
: U0 O1 I  u8 n) w. h2 Y{t=z;z=x;x=t;}/*交换x,z的值*/ * S% M) t9 S. P) Y+ [8 S
if(y>z)
( F4 x+ F5 t: h8 |6 G! A1 d1 E{t=y;y=z;z=t;}/*交换z,y的值*/ 0 G( S4 D* D7 l  I% q8 a, i8 q' H
printf("small to big: %d %d %d\n",x,y,z); } 2 M3 U3 a+ ^% L/ u4 @; |$ T
" G9 H6 C: `, M3 K$ P1 u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-19 09:24 , Processed in 0.082388 second(s), 32 queries , Gzip On.

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

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

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