Advertisement

1748:约瑟夫问题(3.2数据结构之指针和链表)

阅读量:

1748:约瑟夫问题

总时间限制: 1000ms 内存限制: 65536kB
描述
约瑟夫问题:存在n只猴子,按照顺时针方向围成一个圈来决定大王(编号为1至n),从第1号开始依次报数,当数到m时,该猴子将被淘汰,其余猴子继续从1开始进行报数。这一过程持续进行,直到圈中仅剩一只猴子为止,此时该猴子即为猴王。请编写程序,在输入n和m后,输出最终猴王的编号。

输入
每一行包含两个由空格分隔的整数,第一个为 n,第二个为 m(0 < m,n <=300)。最后一行为:

0 0

输出
针对每组输入数据(除最后一行外),输出一行结果,即最后猴王的编号
样例输入
6 2
12 4
8 3
0 0
样例输出
5
1
7

关键点:

  1. 此问题需通过模拟实现,需要注意使用%运算符以确保报数能够循环进行。
  2. flag数组中的索引范围是从0到n-1,其中0表示第n个猴子编号对n取余后的结果。
  3. cur指针实际上代表的是下一个需要判断的猴子编号,在设置flag数组时应特别注意对临界点0的情况进行处理。
复制代码
    #include <iostream>
    #include<algorithm>
    using namespace std;
    
    //http://noi.openjud

全部评论 (0)

还没有任何评论哟~