題目:有n個人圍成一圈,順序排號,從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位,
程式分析:無,
實體:
1 #include <stdio.h> 2 void main() 3 { 4 int num[50],n,*p,j,loop,i,m,k; 5 printf("請輸入這一圈人的數量:\n"); 6 scanf("%d",&n); 7 p=num; 8 //開始給這些人編號 9 for (j=0;j<n;j++) 10 { 11 *(p+j)=j+1; 12 } 13 i=0;//i用于計數,即讓指標后移 14 m=0;//m記錄退出圈子的人數 15 k=0;//k報數1,2,3 16 while(m<n-1)//當退出的人數不大于總人數時,即留下的人數至少是一個人 17 //這句不能寫成m<n,因為假設有8人,當退出了6人時,此時還是進行人數退出,即m++, 18 //這時是7<8,剩下的一個人自己喊1,2,3那么他也就退出了,將不會有輸出 19 { 20 if (*(p+i)!=0)//如果這個人的頭上編號不是0就開始報數加1,這里采用的方法是報數為3的人頭上編號重置為0 21 { 22 k++; 23 } 24 if (k==3) 25 { k=0; //報數清零,即下一個人從1開始報數 26 *(p+i)=0;//將報數為3的人編號重置為0 27 m++; //退出人數加1 28 } 29 i++; //指標后移 30 if (i==n)//這句很關鍵,如果到了隊尾,就要使指標重新指向對頭 31 //并且它只能放在i++后面,因為只有i++了才有可能i==n 32 { 33 i=0; 34 } 35 36 37 } 38 printf("現在剩下的人是:"); 39 for (loop=0;loop<n;loop++) 40 { 41 if (num[loop]!=0) 42 { 43 printf("%2d號\n",num[loop]); 44 } 45 } 46 47 }
以上程式執行輸出結果為:
請輸入這一圈人的數量: 8 現在剩下的人是: 7號
感謝你的閱讀,請用心感悟!希望可以幫到愛學習的你!!分享也是一種快樂!!!請接力,,,
點擊查看原文,謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/4994.html
標籤:C
上一篇:C 實戰練習題目68
下一篇:C 實戰練習題目70
