c#中关于“猴子选大王”代码的困惑!

猴子选大王问题:一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1到m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈... 猴子选大王问题: 一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1到m的顺序围坐一圈,

从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王

using System;
using System.Collections.Generic;
using System.Text;

namespace ExMonkey
{
class Monkey
{
public int King(int M, int N)
{
//总人数 M ,数到第 N 个排除。
int k=0;
for (int i = 2; i <= M; i++)
k = (k + N) % i;
return ++k;
}
static void Main(string[] args)
{
Monkey M = new Monkey();
Console.WriteLine ("第"+M.King(10,3)+"号猴子为大王。");
}
}
}

求下面此循环的意义?
for (int i = 2; i <= M; i++)
k = (k + N) % i;
展开
 我来答
小狗核桃
2011-08-22 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:127
采纳率:0%
帮助的人:112万
展开全部
总人数是M,所以需要数M-1次才能得到结论:
for (int i = 2; i <= M; i++)就是循环M-1次;

这个其实是个极简化的递归公式,详情你看百度百科好吧,Josephus(约瑟夫)问题的数学方法这一段
更多追问追答
追问
谢谢,我昨天就看了,有点不太明白,这个
现在我们把他们的编号做一下转换:   k --> 0   k+1 --> 1   k+2 --> 2   ...   ...   k-3 --> n-3   k-2 --> n-2
对应关系中为什么最后是k-2 --> n-2 ;搞清楚这个我差不多就明白了,是不是我太笨了!
追答
现在我们把他们的编号做一下转换:   k --> 0   k+1 --> 1   k+2 --> 2   ...   ...   k-3 --> n-3   k-2 --> n-2 
这一段是说第一个人(编号一定是(m-1)%n) 出列之后,剩下的n-1个人给他们分别标号为0,1,2,....,n-2

参考资料: http://baike.baidu.com/view/717633.htm

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式