0019-约瑟夫问题

问题描述

约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n) ,从第1号开始报数, 一直数到m,数到m的猴子退出圈外, 剩下的猴子再接着从 1 开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。

输入

每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m, n < 300)。最后一行是:0 0

输出

对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号

输入样列

6 2
12 4
8 3
0 0

输出样例

5
1
7

算法实现

using System;

namespace Questions{
    class Program{
        public static void Main(string[] args){
             while (true) {
                string input = Console.ReadLine();
                string[] data = input.Split();
                int n = int.Parse(data[0]);
                int m = int.Parse(data[1]);
                if (n == 0 && m == 0)
                    break;
                int[] num = new int[n];
                int flag = n;
                int i = 0,k=0;
                while (flag != 1) {
                    if (num[i]==0) {
                        k++;
                        if (k == m) {
                            num[i] = 1;
                            k = 0;
                            flag--;
                        }
                    }
                    i=(i+1)%n;
                }
                for (i = 0; i < n; i++)
                    if (num[i] == 0)
                        Console.WriteLine(i+1);
            }
            Console.ReadKey();
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,152评论 0 41
  • 生活大爆炸版石头剪刀布 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,...
    bbqub阅读 471评论 0 0
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,894评论 0 2
  • 百度百科: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆...
    KPort阅读 3,872评论 0 4
  • 文来自豆瓣徽鹰 1 故事发生在北京的冬天。 肮脏的雾,污浊的霾,干冷的风,和独属于北方的风沙滚滚,让这座皇城一如蒙...
    胡人儿阅读 999评论 0 3