程序选猴子123
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,
凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
大家来试试
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,
凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
大家来试试
<?
$m=10;
$n=1;
$arry_m=range(1,$m);
for($i=1;$i<=($m-1);$i++)
{
$a=count($arry_m);
echo $a;
if($a>=$n)
{
array_splice($arry_m,$n-1,1);
print_r($arry_m);
echo "<br>";
}
if($a<$n)
{
if(($n-$a)>$a)
{
$c=(int)($n/$a);
array_splice($arry_m,$n-$a*$c-1,1);//这个地方有问题
print_r($arry_m);
echo "<br>";
}
else
{
array_splice($arry_m,$n-$a-1,1);
print_r($arry_m);
echo "<br>";
}
}
}
print_r($arry_m);
?>今天花了一早上 用PHP写的! 不知道对不对!
google->约瑟夫环数学解法
//yangyu$M = 10;
$N = 3;for($i = 0; $i <= $M; $i++){
$array[$i]['nextnum'] = ($i==$M) ? 1 : $i+1;
$array[$i]['num'] = $i;
}$count = 0;
$h = $M;
printf("依次退出的猴子: \n");
while($count < $M-1){
$i = 0;
while($i != $N){
$h = $array[$h]['nextnum'];
if($array[$h]['num']) $i++;
}
printf("%4d",$array[$h]['num']);
$array[$h]['num'] = 0;
$count++;
}
$result = array_values(array_filter($array,create_function('$a', 'return $a["num"];')));
printf("\n大王是:%3d\n",$result[0]['num']);
将
for($i = 0; $i <= $M; $i++){
改成
for($i = 1; $i <= $M; $i++){
for( $i = 0; $i < $num; $i++ ) {
$numarray[$i] = $i+1;
}
test2($numarray, 1);
function test2($numarray, $k){
$sign = 5;
$k = $k;
foreach( $numarray as $key => $value ) {
if ( $k % $sign == 0 ) {
$newnum = $key;
$temparr = $numarray;
unset($numarray[$key]);
if ( $key != max(array_keys($temparr)) ) {
$k = 1;
continue;
}else{
if ( !empty($numarray) ) {
$key = max(array_keys($numarray));
}
$k = 1;
if ( count($numarray) == 1 ) {
print_R($key);
exit;
}
test2($numarray, $k);
}
}else{
if ( $key == max(array_keys($numarray)) ) {
$k++;
test2($numarray, $k);
}
if ( count($numarray) == 1 ) {
print_R($numarray[$key]);
exit;
}
}
$k++;
}
}
exit;
while(true) {
$m++; $x++;
$len = 10;
$n = 3;
$m = $m>$len ? 1 : $m;
if(in_array($m, ($tmp ? $tmp : array()))) continue;
if(count($tmp)==($len-1)) {echo '大王的编号: ', $m; break;}
$i = $i>=$n ? 1 : ++$i;
if($i==$n) {
$tmp[] = $m;
}
}
PHP的。 意淫下!O(∩_∩)O
int fun(int n, int m)
{
int i, r = 0;
for (i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
$n=1000;
$q=array();
for($i=0;$i<$n;$i++)
$q[$i] = ($i+1);
$j=0;
for(;;)
{
$qq=array();
for($i=0;$i<count($q);$i++)
{
if(count($q)==1)
{
echo $q[0];die;
}
if($j==8)
{
$j=0;
continue;
}
$qq[]=$q[$i];
$j++;
}
$q=$qq;
}