新手求大神指教,谢谢!

13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。
程序的运行示例如下:
出圈成员及顺序: 3 6 9 12 2 7 11 4 10 5 1 8
最后的成员是: 13
 参考答案
#include
 
#define     N   13
 
struct person
{                           
    int number;
    int nextp;
}                             link[N + 1];//这边为什么要让数组长度为N+1?
 
int main(void)
{                           
    int i, count, h;
 
    /* 建立队列 */
    for (i = 1; i <= N; i++)
    {                           
        if (i == N)
        {                           
            link[i].nextp = 1;
        }
        else
        {                           
            link[i].nextp = i + 1;
        }
        link[i].number = i;
    }
    printf("\n");
    count = 0;
    h = N;
    printf("出圈成员及顺序:");
    while (count < N - 1)
    {                           
        i = 0;
        while (i != 3)
        {                           
            h = link[h].nextp;
            if (link[h].number)
            {                           
                i++;
            }
        }
        printf("%3d", link[h].number);
        link[h].number = 0;
        count++;
    }
 
    printf("\n最后的成员是:");
    for (i = 1; i <= N; i++)
    {                           
        if (link[i].number)
        {                           
            printf("%3d", link[i].number);
        }
    }
 
    return 0;
}                   
还有如果调试的话调试过头了能不能从上一个断点到下一个断点啊?
求大神指教!

c

4个回答

去博客搜 C语言约瑟夫环问题,就会有很多答案和代码,自己看

这个问题可以用数学方法解决,核心代码如下:
int last = 0;
int number=0;
cin>>total; //总人数
for(int i = 2; i <= total; ++i)
{
last = (last + number) % i;
}
result=last+1;

qq512028505
张少锋的博客 不好意思,应该是cin>>number(间隔数),一时手残
3 年多之前 回复

你的问题是什么?有什么不明白的吗?

我用的java迭代的思路,你可以参照下图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐