有趣的C#数组问题:n只猴子选大王......

n只猴子选大王,选举办法如下:从头到尾1、2、3报数,凡报3的退出;余下的从头到尾1、2、3报数,凡报3的退出;余下的又从头到尾报数,还是报3的退出;依次类推,当剩下两个... n只猴子选大王,选举办法如下:从头到尾1、2、3报数,凡报3的退出;余下的从头到尾1、2、3报数,凡报3的退出;余下的又从头到尾报数,还是报3的退出;依次类推,当剩下两个猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置?(用数组完成此程序,其中n从键盘输入)

请求写出具体的解决思路
展开
 我来答
夜幕下的投机客
2009-02-14 · 超过12用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:49.3万
展开全部
猴子选大王问题: 一堆猴子都有编号,编号是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)+"号猴子为大王。");
}
}
}

以上 是我在网上找的。。不过 跟你的问题 有点出入。。你看懂了的话,自己就会改了
百度网友5d6c5b9
2009-02-14 · TA获得超过290个赞
知道小有建树答主
回答量:108
采纳率:0%
帮助的人:118万
展开全部
"当剩下两个猴子时,取这时报1的为王" 可以先取出前两个数字, 然后剩下n-2循环删除首数字即可,一直循环到删除空,然后从头开始数"1",抛出来就是"王". 情况就这么个情况,别嫌程序简单, 好好编写 无误就是成功!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c687645
2009-02-14 · 超过64用户采纳过TA的回答
知道答主
回答量:376
采纳率:0%
帮助的人:218万
展开全部
晕,这个不需要程序,剩下的2个永远都是一开始报1,2的

你的题目肯定有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wf00117299
2009-02-14
知道答主
回答量:30
采纳率:0%
帮助的人:15.8万
展开全部
第一个猴子是大王。真是有趣
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaoqiangshao
2009-02-14 · TA获得超过304个赞
知道小有建树答主
回答量:206
采纳率:0%
帮助的人:237万
展开全部
/// <summary>
/// 直接调用这个方法,传入2个参数
/// </summary>
/// <param name="numberPerson">猴子的个数</param>
/// <param name="unluckyNumber">那个不幸的数字,也就是报到那个数字就要出局的</param>
/// <returns></returns>
private static int Play(int numberPerson, int unluckyNumber)
{
int i = 0; // 循环变量,作为数组的索引
int currentNumber = 0; // 报数计数
int numberRemain = numberPerson; // 剩下的人数
int numberWin = 0; // 赢的人的编号

// 声明数组,存放每个人的状态
bool[] personState = new bool[numberPerson];

// 游戏开始,每个人的状态都为true
for (i = 0; i < personState.Length; i++)
{
personState[i] = true;
}

// 开始游戏
while (numberRemain > 1)
{
for (i = 0; i < personState.Length; i++)
{
if (personState[i] == true) // 状态为true,报数
{
currentNumber++; // 报出的数字
if (currentNumber % unluckyNumber == 0)
{
personState[i] = false; // 报到幸运数字的倍数人退出
numberRemain--; // 退出的人数累加1
}
}
}
}
// 找到唯一一个没有退出的人,状态为true
for (i = 0; i < personState.Length; i++)
{
if (personState[i])
{
numberWin = i + 1;
break;
}
}

return numberWin;

}

这个题跟我一前做的一个报数题是一样的所以没给你改东西,就是以前写过的代码
题目如下:
有一群人被困在了一个小岛上,他们只有一个竹排可以逃生,竹排只能坐一个人,
于是他们决写通过玩退圈游戏来决定哪个人可以坐上竹排逃生。这些人围成了一个圆圈,
从1开始每个人顺序编号,他们商定了一个不幸的数字X,然后,
从编号为1的人开始报数,报到X的倍数就退出游戏,直到最后剩下一个人,
这个人就是可以得到竹排的人。编写程序,
在Main方法中输入玩游戏的人数和不幸的数字X,
自定义Play方法按游戏规则进行游戏,方法返回赢的人编号。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 4条折叠回答
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式