程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 全國計算機編程大賽復賽試題1

全國計算機編程大賽復賽試題1

編輯:C語言基礎知識
    在某次實彈射擊練習中,班長將十個戰士圍成一圈發子彈。首先,班長給第一個戰士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. ");
       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+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]&&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);
   }
   以上是我編的程序,如你能有所改進或有別的方法實現,貼出來共同學習,分享吧!
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved