标题:看到一道题,大家都来算算
只看楼主
风月_无边
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:60
帖 子:2959
专家分:652
注 册:2007-1-19
结帖率:100%
 问题点数:0 回复次数:10 
看到一道题,大家都来算算
由1-2000,从1开始隔一取数,将取得的数除去,问最后能剩余的数是几,经过几次能得到这个数。  用php怎么写出来

搜索更多相关主题的帖子: php 
2010-11-25 10:29
gupiao175
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
得分:0 
有点像约涩夫环的问题。思路类似,有意思,帮顶!

Q:1428196631,百度:开发地 即可找到我,有事请留言!
2010-11-25 23:12
gupiao175
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
得分:0 
没有装PHP平台。用JS试着写了一个。不过感觉很困惑,大家参考下:
<script type="text/javascript">
var arr=[];
var str="";
var k;
for(var i=0;i<2000;i++)
{
  arr[i]=i+1;
}
function findz(brr){
   for(var j=0;j<brr.length;j++)
   {
    if(brr.length=1){return brr[0];}//如果数组最后只有一个元素了。直接返回!
    if(j%2!=0){brr[j]="";}//畸数位清空!
    str+=brr[j]+",";      //组合一次!
     }
     findz(str.split(",,"));//递归调用自己!
}
 document.write(findz(arr));
</script>


Q:1428196631,百度:开发地 即可找到我,有事请留言!
2010-11-27 21:22
gupiao175
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
得分:0 
我终于知道楼主的意思了,我忽略了一个步骤!继续思考代码!到时候再补出来!

Q:1428196631,百度:开发地 即可找到我,有事请留言!
2010-11-28 15:02
风月_无边
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:60
帖 子:2959
专家分:652
注 册:2007-1-19
得分:0 
看似简单的问题, 真正动手去做,就会发现有新的问题了,

我的网站 http://www.
2010-11-29 09:20
asmdaydream
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:中原
等 级:版主
威 望:13
帖 子:257
专家分:840
注 册:2009-5-10
得分:0 
程序代码:
<?php
$arr = range(1,2000);
$loop_for_start =0;  //用于找开始的那个数
$left = 2000;        //表示还剩下的数
$times =0;           //循环次数
$last = 0;           //最后一个
while($left>1)
{    
    $loop_for_start=0;
    while($arr[$loop_for_start]==0 && $loop_for_start<2000)
    {
        $loop_for_start++;
    }
    print($loop_for_start." ....  ");
    //得到开始的位置了,开始循环
    $arr[$loop_for_start]=0;
    //print('$arr['.$loop_for_start."]=".$arr[$loop_for_start]);/////////////////////////////
    $left--;
    while($loop_for_start<2000 && $left>1)
    {
        //得到后面一个
        $loop_for_start++;
        while($arr[$loop_for_start]==0 && $loop_for_start<2000)
        {
            $loop_for_start++;
        }
        //再取后面一个,隔一除去
        $loop_for_start++;
        while($arr[$loop_for_start]==0 && $loop_for_start<2000)
        {
            $loop_for_start++;
        }
        //如果不为0就可以删除了
        if($arr[$loop_for_start]!=0){
            $arr[$loop_for_start]=0;
            $left--;
        }
    }
    $times++;
}
print($times."次..\n");
//找下最后一个
$loop_for_start=0;
while($arr[$loop_for_start]==0 && $loop_for_start<2000){
    $loop_for_start++;
}
if($loop_for_start==2000){
    print('失败');
} else {
    print('最后剩下'.$loop_for_start."\n");
}

?>

输出的前面几个是每次循环的开始位置,由于直接使用的数组,效率非常低
0 .... 1 .... 3 .... 7 .... 15 .... 31 .... 63 .... 127 .... 255 .... 511 .... 10次.. 最后剩下1023

常走夜路不怕黑 长沙PHP高薪招聘群6K+ 95926136
2010-11-29 16:03
asmdaydream
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:中原
等 级:版主
威 望:13
帖 子:257
专家分:840
注 册:2009-5-10
得分:0 
不知道我对题的理解对不对

常走夜路不怕黑 长沙PHP高薪招聘群6K+ 95926136
2010-11-29 16:04
lyl198659
Rank: 1
等 级:新手上路
帖 子:4
专家分:7
注 册:2010-12-6
得分:0 
有意思,很开发思维
2010-12-06 14:21
pipiku
Rank: 1
等 级:新手上路
帖 子:49
专家分:2
注 册:2009-3-20
得分:0 
学习一下
2010-12-06 16:14
风月_无边
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:60
帖 子:2959
专家分:652
注 册:2007-1-19
得分:0 
递归实现,思路类似
function getRand($arr){
    if(count($arr)!=1){
        $i = 0;
        foreach ($arr as &$a){
            
            if($i%2 == 0){
                unset($arr[$i]);
            }
            $i++;
        }
        $arr = array_values($arr);
        return getRand($arr);
        
    }else{
        return $arr;
    }
}
$arr = range(1,2000);
$re = getRand($arr);
print_r($re);

我的网站 http://www.
2010-12-06 16:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-326817-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099881 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved