北理工C语言2Word文档格式.docx

上传人:b****4 文档编号:17863728 上传时间:2022-12-11 格式:DOCX 页数:25 大小:29.32KB
下载 相关 举报
北理工C语言2Word文档格式.docx_第1页
第1页 / 共25页
北理工C语言2Word文档格式.docx_第2页
第2页 / 共25页
北理工C语言2Word文档格式.docx_第3页
第3页 / 共25页
北理工C语言2Word文档格式.docx_第4页
第4页 / 共25页
北理工C语言2Word文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

北理工C语言2Word文档格式.docx

《北理工C语言2Word文档格式.docx》由会员分享,可在线阅读,更多相关《北理工C语言2Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

北理工C语言2Word文档格式.docx

%d\n"

n);

}

/*判断反序数是否是原整数的9倍若是则输出*/

2-3.口袋中有12个球,其中3红,3白和6黑,从中任取8个球,编程,输出所有不同的取法。

No.REDWHITEBLACK

------------------------

1:

026

2:

035

13:

332

设任取红球的个数为i,白球的个数为j,黑球的个数为k,据题意红球和白球个数的取值范围是0~3,黑球的取值范围是0~6。

所以用三重循环穷举红球、白球、黑球可能的值,输出满足条件(总数为8个球)的取法。

因为总数为8个球,所以黑球的个数为8-i-j(<

=6),故可以省略k循环。

main()/*sj1-2-3*/

{inti,j,count=0;

No.REDWHITEBLACK\n"

);

-----------------------------\n"

for(i=0;

i<

=3;

i++)/*循环控制变量i控制任取红球个数0~3*/

for(j=0;

j<

j++)/*循环控制变量j控制任取白球个数0~3*/

if((8-i-j)<

=6)

%2d:

%d%d%d\n"

++count,i,j,8-i-j);

2-4.小明有五本不同的新书,要借给A、B、C三位小朋友,每人每次只能借一本,编程,输出所有不同的借法。

No.ABC

1123

2124

……

60543

设5本书分别命名为1、2、3、4、5,A、B、C可以任取一本书,所以可以用A、B、C三重循环,取值范围:

从1到5。

A、B、C所借书互不相同(a!

=b&

&

a!

=c&

b!

=c)。

main()/*sj1-2-4*/

{inta,b,c,n=0;

No.ABC\n"

-------------------------\n"

=5;

a++)/*循环变量a控制任取书1~5*/

for(b=1;

b++)/*循环变量b控制任取书1~5*/

{if(a==b)continue;

for(c=1;

c++)/*循环变量c控制任取书1~5*/

if(a!

=c)

++n,a,b,c);

2-5.编程,求全部水仙花数。

所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。

如:

153=13+53+33

153、370、371、407

对三位数i循环(i=100~999),将i的各位数字分解为a,b,c后,输出满足i=a3+b3+c3的i。

n位数i的各位数字(从高位到低位)分解方法:

i/k%10;

k=10n-1,10n-2,…,102,10,1

main()/*sj1-2-5*/

{inti,a,b,c;

for(i=100;

1000;

i++)/*穷举要判定的数i的取值范围100~999*/

{a=i/100;

/*截取整数i的百位数字*/

b=i/10%10;

/*截取整数i的十位数字*/

c=i%10;

/*截取整数i的个位数字*/

if(a*a*a+b*b*b+c*c*c==i)

%d"

i);

/*若i是水仙花数,则输出*/

2-6.100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮1担。

编程,输出所有满足条件的方案(即大、中、小马的数目)。

1:

l=2m=30s=68

2:

l=5m=25s=70

3:

l=8m=20s=72

4:

l=11m=15s=74

5:

l=14m=10s=76

6:

l=17m=5s=78

7:

l=20m=0s=80

大马l一匹驮3担,它至多l=100/3=33匹;

中马m至多m=(100-3*l)/2匹;

小马s=(100-l-m)匹.可以用l、m两重循环(l=0~33,m=0~(100-3*l)/2),输出满足3l+2m+s/2=100(s是2的倍数)的l、m、s。

main()/*sj1-2-6*/

{intl,m,s,j=0;

for(l=0;

l<

=33;

l++)

for(m=0;

m<

=(100-3*l)/2;

m++)

{s=100-l-m;

if(s%2==0&

3*l+2*m+s/2==100)

printf("

l=%2dm=%2ds=%2d\n"

++j,l,m,s);

2-7.用一元人民币兑换成1分、2分和5分硬币,编程,输出所有不同的兑换方法及兑换方法个数。

No.1>

>

5:

02:

01:

100

No.2>

11:

98

……

No。

541>

202:

0

设f5,f2,f1分别表示5分、2分和1分的个数,f5<

=20,f2<

=(100-f5*5)/2;

f1<

=100-f5*5-f2*2。

可以用f5、f2两重循环(f5=0~20,f2=0~(100-f5*5)/2),输出所有不同的兑换方法.至于兑换方法个数可以设变量n计数并输出即可。

main()/*sj1-2-7*/

{intf1,f2,f5,count=0;

for(f5=0;

f5<

=20;

f5++)

for(f2=0;

f2<

f2++)

{f1=100-f5*5-f2*2;

No.%3d>

5:

%4d2:

%2d1:

%2d\n"

++count,f5,f2,f1);

2-8.编程,从键盘输入1个人的工资(1000—9999之间的整数),计算给这个人发工资时,需面值100元,50元,20元,10元,5元,2元和1元的人民币各多少张?

输出总张数最少的10种方案。

输入2310

no.100502010521

123001000

223000200

323000121

423000113

523000105

623000050

723000042

823000034

923000026

1023000018

设工资为n,100元至多为f100=n/100张,

50元至多为f50=(n-f100*100)/50张

20元至多为f20=(n-f100*100-f50*50)/20张

10元至多为f10=(n-f100*100-f50*50-f20*20)/10张。

5元至多为f5=(n-f100*100-f50*50-f20*20-f10*10)/5张。

2元至多为f2=(n-f100*100-f50*50-f20*20-f10*10-f5*5)/2张。

1元至多为f1=(n-f100*100-f50*50-f20*20-f10*10-f5*5-f2*2)张。

大面值人民币用得越多,总张数越少,因此用f100,f50,…,f1共7重循环(各面值张数从大到小循环,如:

f100=n/100~1)。

输出前10个满足条件(工资=∑fi)的面值组合。

main()/*sj1-2-8*/

{intn,f1,f2,f5,f10,f20,f50,f100,count=0;

scanf(“%d”,&

n);

printf(“no.100502010521\n”)

for(f100=n/100;

f100>

=0;

f100--)

for(f50=(n-f100*100)/50;

f50>

f50--)

for(f20=(n-f100*100-f50*50)/20;

f20>

f20--)

for(f10=(n-f100*100-f50*50-f20*20)/10;

f10>

f10--)

for(f5=(n-f100*100-f50*50-f20*20-f10*10)/5;

f5>

f5--)

for(f2=(n-f100*100-f50*50-f20*20-f10*10-f5*5)/2;

f2>

f2--)

{f1=n-f100*100-f50*50-f20*20-f10*10-f5*5-f2*2;

if(n==f100*100+f50*50+f20*20+f10*10+f5*5+f2*2+f1)

%2d%6d%6d%6d%6d%6d%6d%6d\n"

++count,f100,f50,f20,f10,f5,f2,f1);

2-9.编程,输出555555的约数中最大的三位数。

777

对三位数j循环(j=999~100),输出首次能整除555555的j(最大约数)。

main()/*sj1-2-9*/

{intj;

longn;

/*使用长整型变量,以免超出整数的表示范围*/

Pleaseinputnumber:

"

scanf("

%ld"

&

for(j=999;

j>

=100;

j--)/*可能的取值范围在999到100之间,j从大到小*/

if(n%j==0)/*若能够整除j,则j是约数,输出结果*/

{printf("

Themaxfactorwith3digitsin%ldis:

%d.\n"

n,j);

break;

/*控制退出循环*/

if(j<

100)printf("

%ldhasnotfactorwith3digits\n"

n);

2-10.编程,输出所有个位数为6且能被31整除的五位数及其个数。

No.110106

No.210416

No.28999386

No.29099696

对5位数n循环10000~99999,输出满足条件n%10==6&

n%31==0的所有n.

main()/*sj1-2-10*/

{longn,j=0;

for(n=10000;

n<

=99999;

n++)/*取值范围在10000到99999之间*/

if(n%10==6&

n%31==0)/*个位数为6且能被31整除*/

No.%ld%ld\n"

++j,n);

2-11.一辆卡车违犯交通规则,撞人逃跑。

现场三人目击事件,但都没记住车号,只记下车号的一些特征。

甲说:

牌照的前两位数字是相同的;

乙说:

牌照的后两位数字是相同的;

丙是位数学家,他说:

四位的车号刚好是一个整数的平方。

根据以上线索,编程,输出车号。

7744

用两重循环构造一个前两位数相同、后两位数相同且相互间又不同的整数i*1000+i*100+j*10+j,(其中i=1~9,j=0~9),然后再用循环(c=31~99,c的平方为4位数)判断该整数是否是c的平方。

main()/*sj1-2-11*/

{inti,j,k,c;

for(i=1;

=9;

i++)/*i:

车号前二位的取值*/

j++)/*j:

车号后二位的取值*/

if(i!

=j)/*判断两位数字是否相异*/

{k=i*1000+i*100+j*10+j;

/*计算出可能的整数*/

for(c=31;

100;

c++)/*31~99的平方为4位数*/

if(c*c==k)

Lorry_No.is%d.\n"

k);

/*若是,打印结果*/

2-12.中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:

鸡翁一,值钱五;

鸡母一,值钱三;

鸡雏三,值钱一;

百钱买百鸡,翁、母、雏各几何?

编程,输出所有可能的购买方案。

No.abc

102575

241878

381181

412484

设鸡翁a只,鸡母b只,鸡雏c只,则a+b+c=100,且5a+3b+c/3=100,即15a+9b+c=300,鸡翁至多买100/5=20只,鸡母至多买100/3=33,鸡雏买100-a-b只。

用两重循环(a=0~20,b=0~33)输出满足条件a+b+c==100和15*a+9*b+c==300的所有购买方案。

main()/*sj1-2-12*/

{inta,b,c,n=0;

No.abc\n"

for(a=0;

a++)/*鸡翁只数取值*/

for(b=0;

b++)/*鸡母只数取值*/

{c=100-a-b;

/*计算出鸡雏的只数*/

if(15*a+9*b+c==300)

%2d%d%d%d\n"

++n,a,b,c);

/*打印结果*/

2-13.编程,输出1000到100000之间所有满足下列条件的所有整数及其个数:

整数的各位数字之和等于5。

11004

21013

31022

41031

10340100

10441000

10550000

对i循环(i=1000~100000),将i的各位数字分解为a,b,c,d,e,f后,输出满足各位数字之和等于5的i。

main()/*sj1-2-13*/

{longi,a,b,c,d,e,f,n=0;

for(i=1000;

=100000;

{a=i/100000;

b=i/10000%10;

c=i/1000%10;

d=i/100%10

e=i/10%10;

f=i%10;

if(a+b+c+d+e+f==5)

%3ld%ld\n"

++n,i);

/*若i满足要求,则输出*/

2-14.编程,任意输入一个偶数n,请将它分解为两个素数之和。

输出形式为:

*=*+*

输入248,输出248=7+241。

输入561,无输出

对j=2,3,…n-1循环,则n为j和m=n-j之和,若j、m均是素数则输出。

main()/*sj1-2-14*/

{intj,k,n,m;

Pleaseentern:

%d"

&

for(j=2;

n;

j++)/*穷举法分解n为两个素数j和m之和*/

{for(k=2;

k<

j;

k++)/*检验j是否素数*/

if(j%k==0)break;

/*j能够被小于它的一个数整除就不是素数*/

if(k>

=j)/*j是素数*/

{m=n-j;

for(k=2;

m;

k++)/*检验m是否素数*/

if(m%k==0)break;

if(k>

=m)/*m也是素数,输出结果*/

{printf("

%d=%d+%d\n"

n,j,m);

2-15.有一正整数等差数列,其前四项之和是26,前四项之积是880,编程,输出此数列的前四项。

25811

对a=1,2,…循环,对每个a,依次令公差k=1,2,…,输出满足下列条件的a,b=a+k,c=a+2k,d=a+3k:

a+b+c+d==26&

a*b*b*d==880

main()/*sj1-2-15*/

{inta=1,b,c,d,f=0,k=1;

while

(1)

{k=1;

b=a+k;

c=b+k;

d=c+k;

if(a+b+c+d>

26||a*b*c*d>

880)/*肯定不能满足*/

{printf("

notfound!

!

\n"

break;

while

(1)/*以不同的公差试探*/

{if(a+b+c+d>

880)break;

/*不可能满足*/

if(a+b+c+d==26&

a*b*c*d==880)/*找到*/

%5d%5d%5d%5d\n"

a,b,c,d);

f=1;

k++;

if(f==1)break;

a++;

2-16.一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。

又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。

编程,输出这个自然数。

1993

对自然数1,2,。

搜索满足下列条件的数K:

对n=k/8;

b=n/8;

a=b/8;

满足k%8==1&

n%8==1&

b%8==7,对c=k/17;

d=n/17;

满足(k%17==4&

c%17==15&

2*a==d)

main()/*sj1-2-16*/

{intn,b,a,k=0;

while(++k)

{n=k/8;

if(k%8!

=1||n%8!

=1||b%8!

=7)continue;

n=k/17;

b=n/17;

if(k%17!

=4||n%17!

=15)continue;

if(2*a==b){printf("

k=%d\n"

k);

2-17.如果一个数恰好等于它的因子之和,则称该数为“完全数”。

6的因子是1、2、3,而6=1+2+3,则6是个“完全数”。

编程,输出1000以内的全部“完全数”。

1+2+3==6。

1+2+4+7+14==28

1+2+4+8+16+31+62+124+248==496

对i循环(i=1~1000),输出满足条件的i及其各因子(用a数组记录)。

main()/*sj1-2-17*/

{inti,j,m,s,k,a[100];

=1000;

i++)/*寻找1000以内的完全数*/

{m=i;

s=0;

k=0;

for(j=1;

j++)

if(m%j==0)

{s=s+j;

a[k++]=j;

}

if(i==s)/*I为各因子之和,输出*/

{for(j=0;

k;

%d+"

a[j]);

\b==%d\n"

2-18.一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码顺序正好相反,编程,输出这个三位数。

248(248=(503)7,248=(305)9)

3位7进制数的范围:

(100)7=49,(666)7=342,

3位9进制数的范围:

(100)9=81,(888)9=728

所以81~342的7、9进制数均为3位数。

对i循环(i=81~342),计算i的7、9进制数,输出它们数码顺序正好相反的i。

main()/*sj1-2-18*/

{inti,n,k,a[3],b[3];

for(i=81;

=342;

i++)

{for(n=i,k=0;

n>

0;

n/=7)/*化为7进制并存放到a*/

a[k++]=n%7;

for(n=i,k=0;

n/=9)/*化为9进制并存放到b*/

b[k++]=n%9;

for(n=0;

n++)/*检查两个三位数的数码顺序是否相反*/

if(a[n]!

=b[k-n-1])break;

/*非反序,n<

k*/

if(n==k)/*反序,n==k*/

%d\n"

2-19.用40元买苹果、西瓜和梨共100个,3种水果都要。

已知苹果0.4元一个,西瓜4元一个,梨0.2元一个。

问可以各买多少个?

编程,输出全部购买方案。

设西瓜买x个,苹果买y个,梨买z个,则问题满足方程:

4x+0.4y+0.2z=40

x+y+z=100

即:

40x+4y+2z=400

西瓜至多买(40-0.4-0.2)/4=9个,苹果至多买(40-4-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1