題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來的第幾號的那位
思路:用一個數組存這n個人,里面的初始狀態全設為1,表示都還在圈子里面。
然后用q來記錄報的號,因為每次報號報到3的人就得退出圈子,用j來表示圈子內剩余的人數。
每當有人報到3時,j-1,同時將數組中該元素的值標記為0,q清0。
這樣while循環結束后,數組中就只會剩下一個人的值為1,輸出那個人的序號+1即可(數組是從0開始,所以+1)
1 #include<stdio.h> 2 int main(){ 3 int a[100]; 4 int n; 5 int i,j; 6 printf("請輸入有多少人參加該游戲:"); 7 scanf("%d",&n); 8 j=n; 9 for(i=0;i<n;i++) 10 a[i]=1; 11 int q=0; //記錄步數 12 while(j>1){ 13 for(i=0;i<n;i++){ 14 if(a[i]!=0) q++; 15 if(q==3) { 16 a[i]=0; 17 j--; 18 q=0; 19 printf("第 %d 位玩家出圈\n",i+1); 20 } 21 } 22 } 23 printf("\n"); 24 for(i=0;i<n;i++){ 25 if(a[i]==1) printf("最后在圈內的是第 %d 位玩家",i+1); 26 } 27 }
運行截圖: