G: 最後報數的人是誰

題目描述

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

輸入

初始人數n

輸出

最後一人的初始編號

樣例輸入

3
4
5
10

樣例輸出

2
1
4
4

提示

        思路: 想法很簡單,就是 變量 sum 從 1開始到 3 ,如果是3 的倍數,a[i] 就是變爲零 ,也就是退出的意思,i 一直都是從1到 最後一個數增加的,也就是形成了一個圈了的!

#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    while(scanf("%d",&n)==1)
    {
        int a[200];
        for(int i=1;i<=n;i++)
            a[i]=i;
        int su=n,sum=1;
        while(1)
        {
            for(int i=1;i<=su;i++)
            {
                if(a[i]==0)
                    continue;
                if(sum%3==0)
                {
                    a[i]=0;
                    n--;
                    sum=0;
                }
                sum++;
            }
            if(n==1)
                break;
        }
        for(int i=1;i<=su;i++)
        {
            if(a[i]!=0)
                printf("%d\n",i);
        }

    }

return 0;

}    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章