找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

C语言经典算法100例

[复制链接]

114

主题

136

帖子

1000

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
【程序1
9 S8 o% E! T4 @7 E2 U题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
/ i5 h+ A. S- d3 p! l5 O1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去 1 G4 I( F: T. r# E9 M! D
掉不满足条件的排列。 + ~  j& n5 |9 \  o7 s9 d& N, r
2.程序源代码:
' Y9 m2 x( J( s, umain() { 2 ^% v4 p; z! w; `; c4 o
int i,j,k;
* ?% @$ s+ z9 [' F- k" ]5 Dprintf("\n"); * M8 `. ]+ d8 z3 f# {
for(i=1;i<5;i++) *以下为三重循环*/ 3 c5 n3 c- M% U5 r7 \& M! h
for(j=1;j<5;j++)
4 i5 \1 k- Q! L# R7 Gfor (k=1;k<5;k++) { . O9 D+ s6 g* r# ~6 @+ c" Z# i" N
if (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/ ; t1 X( V' X" X
printf("%d,%d,%d\n",i,j,k); }} 6 Z8 G% B  h( V- D" o  S
============================================================== 3 N$ [2 \7 H6 Q* y0 Z
【程序2
; w( z3 u, C1 v/ _9 W6 i9 t: q$ c题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 + y$ m6 l$ J# y" t9 ~$ v
10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
& q  O; e7 n! {7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于
' H5 L/ m' ^# J; p5 M40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于 9 m+ t2 `% r! S9 y
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?   ^6 }' t1 d  R0 A; [
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
. H  J2 r& Z' p% O' t6 d2.程序源代码: 9 t, ]2 \( k9 s6 k1 B& q
main() { / u: ]9 m1 w- c! A8 |2 w; w
long int i;
2 n# l+ n+ C( c/ K" d3 n5 E' _9 ?4 l6 Zint bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
5 l% j  l5 {: K: r' Hscanf("%ld",&i);
* u, m7 u: N1 ibonus1=100000*0.1;bonus2=bonus1+100000*0.75; 9 w2 Z! h" n$ G& V
bonus4=bonus2+200000*0.5;
7 [* }8 f$ i8 wbonus6=bonus4+200000*0.3; 9 F& Q1 X0 d( ^
bonus10=bonus6+400000*0.15; ( |( V& \% v2 f4 [7 K% A3 W8 w
if(i<=100000)
  _5 j( S) Q) }bonus=i*0.1; 0 Y1 `  L" N. H* L  X2 P& L
else if(i<=200000) ' G4 k3 A7 t2 g1 Q5 R0 ~0 K
bonus=bonus1+(i-100000)*0.075;
; {* k9 a/ F3 y) r( ]else if(i<=400000)
& V" a- t; q9 i  Kbonus=bonus2+(i-200000)*0.05; # R6 z: b0 A( a6 k& g
else if(i<=600000) 9 C/ u8 I! d" D) S2 @/ _! s
bonus=bonus4+(i-400000)*0.03;
- W; s# K2 J# \0 u: r0 y; O1 B. |else if(i<=1000000)
+ x' n9 ^3 y/ Bbonus=bonus6+(i-600000)*0.015;
( m; ]7 Y! E$ c( A' W* G1 Selse
5 P6 J, O- b) ~/ \bonus=bonus10+(i-1000000)*0.01; ' j+ e6 U7 l2 n4 X, B9 }! {! }
printf("bonus=%d",bonus); } * c9 z# q  U6 u/ [  m: i
==============================================================
9 f4 l7 V+ s8 }【程序3& q0 h! _. b! U6 q7 |% ^( [
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
5 x+ r+ t% K7 z0 ]& K1 K: x1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 . W, z, q1 `7 g7 _! R
的结果满足如下条件,即是结果。请看具体分析: . c5 V5 V- N: X
2.程序源代码:
5 [. ]  L! i1 [" Y8 F. t" ?  u8 \#include "math.h" 0 j% [; Q; p4 T6 |5 `; c
main() { ! ^8 P! f( Q5 `& f( n
long int i,x,y,z;
' ]0 Q8 C3 L8 _% j' f5 d2 r6 f/ L% cfor (i=1;i<100000;i++) ; a+ p5 X& C: t$ b1 R2 H
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ 3 M+ @& h" T6 p: o
y=sqrt(i+268); /*y为再加上168后开方后的结果*/ 1 _. M! Z; R! _' D- r0 w
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ ; ~( [7 n* U9 p" J9 z, Z
printf("\n%ld\n",i); } }
! J6 I4 B2 I: g============================================================== ! v& o, C4 L3 ~9 w5 v, U1 |: e5 z, M
【程序46 Q9 X, r* m/ F7 [* h4 G( v1 \
题目:输入某年某月某日,判断这一天是这一年的第几天?
4 i/ @) a" t+ h) v) Q+ U1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊   h: P/ T$ }! D
情况,闰年且输入月份大于3时需考虑多加一天。
4 P/ g5 q- e+ ]8 s9 r2.程序源代码: ' A, s4 F  b  G0 C
main() { ! C, y, x" f' v/ m! a  |2 G5 H) M
int day,month,year,sum,leap; # Y+ |* E9 z+ m& b
printf("\nplease input year,month,day\n");
7 `( l; S+ R1 K" Fscanf("%d,%d,%d",&year,&month,&day); ( q- O$ ~! S2 D2 j
switch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break;
; s( m" \  Q2 f% ?0 icase 2:sum=31;break;
: P8 F9 A( P8 s$ U& s% Vcase 3:sum=59;break;
" |  o: z" y* K1 k% Mcase 4:sum=90;break;
5 ^/ D: @! K$ Q% |; n/ ^case 5:sum=120;break;
6 u- S  E) t+ G% ^" D0 dcase 6:sum=151;break;
1 D0 u3 c& u; ecase 7:sum=181;break;
, l4 ^- |7 h8 f+ K/ @$ _8 ycase 8:sum=212;break;
8 |+ l  y) i" N8 jcase 9:sum=243;break;
$ M6 K" L6 j! A7 k( ^0 X9 {case 10:sum=273;break;
( f* O) k/ j7 L1 Q$ g8 n4 }. _case 11:sum=304;break; ) K. J- `; N1 z( M# d2 p
case 12:sum=334;break; 6 F" e7 r$ m, c- l+ D- o9 R
default:printf("data error");break; }
8 Z' V0 W9 t% s8 m; ]/ w* Usum=sum+day; /*再加上某天的天数*/ 7 y4 S/ ^# h9 F8 @0 ]/ |' |% R  n. z/ C  D4 R
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ $ k) F, g: v) `! k3 r
leap=1; 2 o8 s$ |+ g1 h
else
1 g) o! _; v. e: ~' oleap=0;
% P8 M7 P/ S" M, n% i( Fif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ ) v9 R- g( G9 v4 n2 P3 z& v; k- u% t
sum++;
8 C4 A) n- Y. |6 N: Kprintf("It is the %dth day.",sum);} 5 g$ N# _5 U5 t" E9 n- c
============================================================== % ~. L( Y" x" K' M
【程序54 ^' j7 W/ d& {# }9 |
题目:输入三个整数x,y,z,请把这三个数由小到大输出。 2 ~+ e* u& z4 C+ V8 v/ V' R
1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换, 9 s1 p2 _! @1 r
然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。 , }+ ^0 ^* a5 h: r( ?* s
2.程序源代码: ) r8 E% m4 p  d; ^
main() {
* R3 T$ A; r2 n% l* Sint x,y,z,t; / \' q* r( E) x+ f& |; n, y
scanf("%d%d%d",&x,&y,&z); , o4 G* ]5 J5 @5 R
if (x>y)
& E; Y3 k6 ]+ y. o' Y9 l{t=x;x=y;y=t;} /*交换x,y的值*/
5 v- N) v  L' g5 t- O8 yif(x>z)   t( j* h: M, ^: S* p! G9 l
{t=z;z=x;x=t;}/*交换x,z的值*/ 1 {: P5 s- y$ d0 `7 b
if(y>z)
" a& U0 a. Y$ I: m2 I  k- U; `9 W{t=y;y=z;z=t;}/*交换z,y的值*/
9 I- r% K4 H% ^7 Vprintf("small to big: %d %d %d\n",x,y,z); } 5 }% g, z" Y7 R. I" s
* W, h9 \5 D+ e( N( R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-1 04:09 , Processed in 0.067364 second(s), 32 queries , Gzip On.

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

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

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