资源描述:
《全国计算机编程大赛复赛试题1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、全国计算机编程大赛复赛试题1责任编辑:育鹰 更新日期:2005-8-6 在某次实弹射击训练中,班长将十个战士围成一圈发子弹。首先,班长给第一个战士10颗,第二个战士2颗,第三个战士8颗,第四个战士22颗,第五个战士16颗,第六个战士4颗,第七个战士10颗,第八个战士6颗,第九个战士14颗,第十个战士20颗。然后按如下方法将每个战士手中的子弹进行调整:所有的战士检查自己手中的子弹数,如果子弹数为奇数,则向班长再要一颗。然后每个战士再同时将自己手中的子弹分一半给下一个战士(第10个战士将手中的子弹分一半给第1个战
2、士)。问需要多少次调整后,每个战士手中的子弹数都相等?每人各有多少颗子弹? 要求输出每轮调整后各战士手中的子弹数。 要求结果的输出格式为0 10 2 8 22 16 4 10 6 14 20 各战士手中原始的子弹数1 xx xx xx xx xx xx xx xx xx xx 第1轮各战士手中的子弹数2 xx xx xx xx xx xx xx xx xx xx 第2轮各战士手中的子弹数 ……n xx xx xx xx xx xx xx xx xx xx 最后一轮各战士手中的子弹数(应
3、相等) #include"stdio.h"main(){inti,ip=0,a[10],b[10]; FILE*fp; a[0]=10;a[1]=2; /* 初始化*/ a[2]=8; a[3]=22; a[4]=16;a[5]=4; a[6]=10;a[7]=6; a[8]=14;a[9]=20; if((fp=fopen("SHITI1.dat","w"))==NULL) /* 建输出结果文件*/ {printf("cannotopenthisfile.");
4、 exit(0); } fprintf(fp,"%5d",ip); /* ID为序号*/ for(i=0;i<10;i++) fprintf(fp,"%5d",a[i]); fprintf(fp,""); do{ for(i=0;i<10;i++) /* 数为奇加1*/ {if(a[i]%2!=0) a[i]=a[i]+1; } for(i=0;i<9;i++) /* 向下传一半*/ b[i+
5、1]=(a[i]+a[i+1])/2; b[0]=(a[9]+a[0])/2; ip++; fprintf(fp,"%5d",ip); /* 输出到文件 */ for(i=0;i<10;i++) fprintf(fp,"%5d",b[i]); fprintf(fp,""); for(i=0;i<10;i++) a[i]=b[i]; /*直到数相等 */ }while(!(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3
6、]&&a[3]==a[4]&&a[4]==a[5]&&a[5]==a[6]&&a[6]==a[7]&&a[7]==a[8]&&a[8]==a[9])); fclose(fp);}全国计算机编程大赛复赛试题2责任编辑:育鹰 更新日期:2005-8-6 某幼儿园按如下方法依次给A,B,C,D,E五个小孩发糖果。将全部糖果的一半再加二分之一块糖果发给第一个小孩;将剩下糖果的三分之一再加三分之一块糖果发给第二个小孩;将剩下糖果的四分之一再加四分之一块糖果发给第三个小孩;将剩下糖果的五分之一再加五分之一块糖果发给第四个
7、小孩;将最后剩下的11块糖果发给第五个小孩。每个小孩得到的糖果数均为整数。试确定原来共有多少块糖果?每个小孩各得到多少块糖果? 要求结果的输出格式为 sum=糖果总数 xa=A得到的糖果数 xb=B得到的糖果数 xc=C得到的糖果数 xd=D得到的糖果数 xe=E得到的糖果数以下是我为实现以上要求而写的,完全能正确实现,请欣赏,如果看了后你有所改进或有别的实现妙方,就请贴出来共同学习与分享吧。让我们为本网站更具实用,可读性强而努力! #include"stdio.h"main(){FI
8、LE*fp; intsum,xa,xb,xc,xd,xe; if((fp=fopen("58114_2.dat","w"))==NULL) /*创建结果文件*/ {printf("cannotopenthisfile."); exit(0); } sum=0; while(1) {if(60*sum-((sum+1)*30+(sum+1)*10+(s