
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; 展开
从第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; 展开
1个回答
展开全部
总人数是M,所以需要数M-1次才能得到结论:
for (int i = 2; i <= M; i++)就是循环M-1次;
这个其实是个极简化的递归公式,详情你看百度百科好吧,Josephus(约瑟夫)问题的数学方法这一段
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询