1192 约瑟夫问题(1)

文章提供了一个C语言程序,用于解决约瑟夫问题。程序接收一个整数n作为输入,表示人数,然后按照从1到3报数的规则,每报到3的人退出,直到最后剩下一个人。程序通过使用数组和循环来跟踪和淘汰参与者,最终输出最后剩下的原始编号。
摘要由CSDN通过智能技术生成

题目描述

约瑟夫问题是一个有趣的游戏。有n个人围成一圈,从第一个人开始沿顺时针方向报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那个人?

输入要求

输入一个整数n。(n<=1000)

输出要求

输出最后剩下的数。

输入样例

5

输出样例

4

#include<stdio.h>
int main()
{
    int n, sum = 1,num;
    int a[1002] = { 0 };
    scanf_s("%d", &n);
    num = n;
    while (n > 1) {
        int x = 2;
        while (x > 0) {
            while (a[sum] == 1) {
                if (sum == num)sum = 1;
                else sum++;
            }
            x--;
            if (sum == num)sum = 1;
            else sum++;
        }
        while (a[sum] == 1) {
            if (sum == num)sum = 1;
            else sum++;
        }
        a[sum] = 1;
        n--;
        if (sum == num)sum = 1;
        else sum++;
    }
    for (int i = 1; i <= num; i++)if (a[i] == 0) {
        printf("%d\n", i);
        break;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值