1098: C语言程序设计教程(第三版)课后习题10.5---有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

题目描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入
初始人数n
输出
最后一人的初始编号
样例输入
3
样例输出
2
提示
来源

思路点拨:定义一个数组,数组下标表示人的编号,若数组里面的元素的值为1代表未出局,为0代表已出局。

代码示例:
#include
int main()
{
    int n,i,f=0,t;
    scanf("%d",&n);
    int a[n];
    for(i=0;i
    {
        a[i]=1;
    }
    /*for(i=0;i
    {
        printf("%d",a[i]);
    }*/
    t=n;
    while(t!=1)
    {
        if(a[i]==1)
        {
            f++;
            if(f==3)
            {
                f=0;
                a[i]=0;
                t--;
            }
        }
        if(i
        {
            i++;
        }
        else
        {
            i=0;
        }
    }
    for(i=0;i
    {
        if(a[i]==1)
        printf("%d",i+1);//注意:数组下标从0开始,而人的实际编号从1开始,因此要+1
    }
}
 
/**************************************************************
    Problem: 1098
    User: 171530425
    Language: C
    Result: 正确
    Time:0 ms
    Memory:1092 kb
****************************************************************/

你可能感兴趣的:(算法练习)