2018: 约瑟夫问题

2018: 约瑟夫问题

时间限制: 1 Sec  内存限制: 64 MB
提交: 1126  解决: 765
[提交][状态][讨论版][命题人:外部导入]

题目描述

n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。 请输出最后一个人的编号。

输入

输入n和m值。

输出

输出胜利者的编号。

样例输入

5 3

样例输出

4

提示

第一轮:3被杀
第二轮:1被杀
第三轮:5被杀
第四轮:2被杀 

#include<stdio.h>
#define N 50
int main()
{
    int i, j, k, n, m, a[N];  //k为计数器, j为数数器, i为数组下标
    scanf("%d%d", &n, &m);
    for(i = 0; i < n; ++i)
        a[i] = i + 1;
    for(k = 0, j = 1, i = 0; i < n; i = (i + 1) % n)  //取余是为了模拟环
    {
        if(a[i] != 0)  //还活着
        {
            if(j == m)  //数到m
            {
                a[i] = 0;
                j = 0;  //从新开始数数
                k++;  //死亡人数+1
                if(k == n)  //输出最后一个人
                    printf("%d\n", i + 1);
            }
            j++;  //计数
            if(k == n)
                break;  //没有活人,跳出循环
        }
    }
    return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/mjn1/p/9898003.html