zoukankan      html  css  js  c++  java
  • 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
    ", i + 1);
                }
                j++;  //计数
                if(k == n)
                    break;  //没有活人,跳出循环
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    转:孙振耀谈人生(推荐)
    自绘按钮的实现
    数据结构知识
    Direct Show采集图像实例
    视觉跟踪
    改变对话框控件的颜色
    笔试题
    CBitmapButton的使用
    Rotor (SSCLI) 2.0 登场!
    Under the hood: 从Win32 SEH到CLI异常处理模型
  • 原文地址:https://www.cnblogs.com/mjn1/p/9898003.html
Copyright © 2011-2022 走看看