1 /* 2 //題目標題: 3 *圍圈報數(谌海軍) 4 5 //題目描述: 6 *有n(n<=100)圍成一圈,順序排號(從1排到n)。從第一個人開始報數(從1報到m(m<=9)),凡報到m的人退出圈子,問最後留下的是原來第幾號的那位? 7 8 //輸入描述: 9 *輸入為兩個正整數,第一個<=100,第二個<=9; 10 11 //輸出描述: 12 *輸出為一個正整數; 13 14 //樣式輸入: 15 100 3 16 17 //樣式輸出: 18 91 19 20 //解題思路: 21 1、定義一個長度為100數組a,初始化為0; 22 2、接收鍵盤輸入值n,m,數組a的前n-1個元素賦值為1~n; 23 3、建立兩層嵌套循環,外循環至退出人數為n-1為止,內循環中從0循環至n,將a數組中非0的數據逢m置零,同時記錄退出人數; 24 4、循環全部結束後輸出最後留下的一個a數組的非零元素的值。 25 */ 26 27 #include <stdio.h> 28 29 int main() 30 { 31 int i, n, m, k=0, cnt = 0, a[100] = {0}; 32 scanf("%d%d,", &n, &m); 33 for(i = 0; i < n; ++i) 34 {a[i] = i+1;} 35 while(cnt < n) 36 { 37 for(i = 0; i < n; ++i) 38 if(a[i]!=0) 39 { 40 k++; 41 if(k==m) {a[i]=0; k=0; cnt++;} 42 } 43 if(cnt==n-1) break; 44 else i=0; 45 } 46 for(i = n-1; i >= 0; --i) 47 if(a[i] != 0) printf("%d", a[i]); 48 return 0; 49 }