/* 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 解題思路: 1、設數組a[n],初始化數組a; 2、將數組a中的數循環賦值,賦值前需判斷該位是否為0; 如何找到應該剔除的數?若n為4,則前一位是應該剔除的數,將其置為0,n重置為1,在此時將標記數++。 如何判斷這是最后應該剔除的數?若標記數為N,則表明這是最后一次剔除,輸出即可。 */ #include<stdio.h> #include<math.h> #include<malloc.h> #include<string.h> #define N 8 main() { int i,k,a[N],n; for(i=0;i<N;i++){ a[i]=i+1; } i=0; n=1; k=0; while(n<=3){ i=i%N; if(a[i]!=0){ a[i]=n; n++; } i++; if(n==4){ a[i-1]=0; k++; n=1; } if(k==N){ printf("%d\n",i); break; } } }