1. 程式人生 > >有n個人圍成一圈,順序排號。 從第1個人開始報數(從1到3報數), 凡報到3的人推出圈子, 問最後留下的是原來第幾號的人。

有n個人圍成一圈,順序排號。 從第1個人開始報數(從1到3報數), 凡報到3的人推出圈子, 問最後留下的是原來第幾號的人。

#include<stdio.h>
int main()
{
    int m,n,k,i,a[55];
    int *p;
    p=a;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        *(p+i)=i+1;//以1到n為序給每個人編號
    }
    m=0;//m為退出人數
    k=0;//k為按1,2,3報數時的計數變數
    i=0;//i為每次迴圈計數變數
    while(m<n-1)//當退出人數比n-1少時執行迴圈體
    {
        if(*(p+i)!=0) k++;
        if(k==3)
        {
            m++;
            k=0;
            *(p+i)=0;  //對退出的人編號為0
        }
        i++;
        if(i==n) i=0;//報數到末尾後,i回覆為0
    }
    while(*p==0)
        p++;   //當*p為0的時候,使p++進行下一位
        printf("%d\n",*p);
    return 0;
}