本文目录一览:
- 1、PHP算法之猴子选大王
- 2、C++猴子选大王问题
- 3、c++猴子选大王问题
PHP算法之猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让M只候选猴子围成一圈,从某位置起顺序编号为1~M号。从第1号开始报数,每轮从1报到N,凡报到N的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
请输入猴子的数量m 11
请输入要排除第几个猴子n 3
7
常规做法又两种,一种是数组,一种是链表,(数学方法不考虑)。对于数组方法测试了两种思路,第一种是生成一个键为1-M的关联数组,值为true,退出的键值为false;另一种是值为1-M的数值数组,退出的unset;结果是使用unset效率更高些。链表是用数组模拟的链表,生成键为1-M的关联数组,值为下一位的键值,最后一位的值为1。退出了就把上一位和下一位链接起来。测试表明,使用链表的速度快于数组。-php猴子选大王
C++猴子选大王问题
花了一点时间思考才写出来的。由于采用遍历数组作为while循环的条件表达式,所以开销较大,应该可以优化的.
程序代码:
script
//假设7个猴子围成一圈.将7个猴子存储在一个数组中
var arr=new Array(7);
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
arr[4]=5;
arr[5]=6;
arr[6]=7;
//数组最大下标
var arrlen=arr.length-1;
//检测数组是否还剩一个不为0的元素值,0表示该猴子已退出
function remainOne()
{
var count=0;
for(i=0;iarr.length;i++)
{
if(arr[i]!=0)
{
count++;
}
}
if(count==1)
{
return false;
}else{
return true;
}
}var k=0;
var m=0; //m为数组的动态下标
//不断循环数猴子一直数到剩下一个为止
while(remainOne())
{
if(arr[m]!=0)
{
++k;
}
//当k=3时表示数到第三只猴子,则该猴子退出
if(k==3)
{
//将k重置为0,重新开始数
k=0;
//该位置的猴子退出
arr[m]=0;
}
m++;
//如果m超出了最大的数组下标,则从最小下标重新开始
if(marrlen)
{
m=0;
}
}
for(i=0;iarr.length;i++)
{
if(arr[i]!=0)
{
alert("猴王是:"+arr[i]);
}
}
/script
c++猴子选大王问题
是不是n个猴子报数选大王的题目?给20分,帮你写的明明白白,注释都可以一条条带上
基本思路:将猴子进行编号放入一个素组,然后外层以个while循环,控制猴子数量,循环条件为个数大于1.内层for循环遍历猴子,用一个变量来计算报数,假设报到3就退出的话··当计数等于3··就将数组元素赋为0;人数也减一个··最后循环输出数组元素··元素值不为0的就是大王-php猴子选大王