WEB开发网
开发学院软件开发C++ 全国计算机编程大赛复赛试题1 阅读

全国计算机编程大赛复赛试题1

 2008-03-08 12:48:10 来源:WEB开发网   
核心提示: 在某次实弹射击练习中,班长将十个战士围成一圈发子弹,全国计算机编程大赛复赛试题1,首先,班长给第一个战士10颗, 要求结果的输出格式为0 10 2 8 22 16 4 10 6 14 20 各战士手中原始的子弹数1 xx xx xx xx xx xx xx xx xx xx 第1轮
   在某次实弹射击练习中,班长将十个战士围成一圈发子弹。首先,班长给第一个战士10颗,第二个战士2颗,第三个战士8颗,第四个战士22颗,第五个战士16颗,第六个战士4颗,第七个战士10颗,第八个战士6颗,第九个战士14颗,第十个战士20颗。然后按如下方法将每个战士手中的子弹进行调整:所有的战士检查自己手中的子弹数,假如子弹数为奇数,则向班长再要一颗。然后每个战士再同时将自己手中的子弹分一半给下一个战士(第10 个战士将手中的子弹分一半给第1个战士)。问需要多少次调整后,每个战士手中的子弹数都相等?每人各有多少颗子弹?
   要求输出每轮调整后各战士手中的子弹数。
   要求结果的输出格式为
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  最后一轮各战士手中的子弹数(应相等)   #include "stdio.h"
main()
{ int i,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("SH99vI1.dat","w"))==NULL)  /*  建输出结果文件 */
  { PRintf("cannot open this file.\n");
   exit(0);
   }   fprintf(fp,"\n%5d",ip);       /*  ID为序号 */
  for(i=0;i<10;i++)
    fprintf(fp,"%5d",a[i]);
  fprintf(fp,"\n");   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+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,"\n");  for(i=0;i<10;i++)
  a[i]=b[i];          /* 直到数相等  */    } while(!(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&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);
}
以上是我编的程序,如你能有所改进或有别的方法实现,贴出来共同学习,分享吧!

Tags:全国 计算机 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接