C语言--约瑟夫环变形---13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现

20 篇文章 5 订阅

13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。
输出提示 “出圈成员及顺序:” 格式 “%3d”
输出提示 “\n最后的成员是:” 格式 “%3d”

程序的运行示例如下:
出圈成员及顺序: 3 6 (后面以此类推,抱歉这里的输出结果保密,暂不公开,注意最后一个人是不出圈的哦)
最后的成员是: (抱歉这里的输出结果保密,暂不公开)

#include<stdio.h>
struct person
{
    int name; //这个人的出场位置
    int count;
};
int main()
{
    struct person arr[13] = {0};
    int i, k = 1, n = 0;  //k是用于报数的计数器,n是退出圈子的总人数
    while (n != 12)    //剩下一个人时退出循环
    {
        for (i = 0; i < 13; i++)
        {
            if (arr[i].count != 3) //没有退出圈子的人才报数
            {
                arr[i].count = k;
                k++;
            }
            if (k == 4)    //k==4,说明arr[i]这个人报数为3
            {
                arr[n].name = i + 1; //n为出队的顺序,i + 1是出队这个人的位置
                k = 1;
                n++;
            }

        }
    }

    printf("出圈成员及顺序:");
    for (i = 0; i < 13; i++)
    {
        if (arr[i].count == 3)
            printf("%3d", arr[i].name);
    }
    printf("\n最后的成员是:");
    for (i = 0; i < 13; i++)
    {
        if (arr[i].count != 3)
        {
             arr[i].name = i+1;
             printf("%3d", arr[i].name);
        }

    }

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值