C语言编程练习 7.13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。

标签: C语言练习

题目完整描述
13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。
程序的运行示例如下:
出圈成员及顺序: 3 6 9 12 2 7 11 4 10 5 1 8
最后的成员是: 13
***输出提示:"\n出圈成员及顺序:"
***输出格式:"%3d"
***输出提示:"\n最后的成员是:"
***输出格式:"%3d"

在这里插入图片描述

参考代码:

#include <stdio.h>
#define     N   13
 
struct person
{
    int number;
    int nextp;
} link[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;
}

版权声明:本文为weixin_43983838原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43983838/article/details/106066158