TO:yonghengdizhen(孤鹰) 
每循环一次,又变了,怎么办,头都想大了,请讲清楚点,我发现循环一次我就要抽根烟,不知道怎么搞的

解决方案 »

  1.   

    临时写的,献丑了,请看看<script>
    function run(m,n){
    var arr=new Array(m)
    var i=-1;
    for(k=0;k<arr.length-1;k++){
    for(j=0;j<n;j++){
    do{
    if(++i>=arr.length)i=0;
    }while(arr[i]!=null);
    }
    arr[i]="qiushuiwuhen"
    }
    do{
    if(++i>=arr.length)i=0;
    }while(arr[i]!=null);
    return i+1;
    }
    for(l=2;l<=100;l++)document.write("<br>总共"+l+"个人玩这个游戏,最后剩下的是第"+run(l,3)+"个人");
    </script>
      

  2.   

    <script>
      var m=13,n=3; 
      var s=new Array(m);   
      var i=0,j=0,k=-1;
      for(i=0;i<m;i++) s[i]=1;  
      i=0;
      while(1){  
    k++;               
    if (k>m-1) k=0;   
    if (s[k]){        
            i++;          
             if ((i % n)==0){          
    s[k]=0;           
    j++;   
    if (j==m-1) break; 
    }
    }
      }
      for(i=0;i<m;i++)  {if (s[i]) document.write('最后是第'+(i+1)+'个人没有出列')}; 
      </script>
      

  3.   

    //其实这是约瑟夫环问题,现在其实有很多方法解决它,不过Javascript不支持指针,所以不能用链表来做
    //如果用C,还可以用递归来实现
    //刚才我上面贴了用数组实现的方法,下面给出详细注释<script>
      var m=13,n=3;  //m是参与的人数,n是报的那个数字
      var s=new Array(m);   //s用来标志所有的参与者的状态
      var order=new Array(m);  //order用来保存所有人的出列次序
      var i=0,j=0,k=-1;
      //初始化所有参与人员,因为刚开始游戏,所有人的状态都为1。
      // 1.在列
      // 0.已出列
      for(i=0;i<m;i++) s[i]=1;  
      i=0;
      while(1){  
        k++;               
        if (k>m-1) k=0;    //如果报数到了最后一个人,就跳到第一个人报数
        if (s[k]){         //只有在列的人才能报数,不考虑已出列的人
            i++;           //开始报数
            if ((i % n)==0){          //如果报数的数字为3
    s[k]=0;           //让他出列
    order[j]=k+1;     //把出列人号码保存下来 
    j++;   //出列的人数增加1
    if (j==m-1) break;  //如果已经有m-1个人出列了,那么跳出循环
    }
        }
      }
     //打印那个没有出列的人
    for(i=0;i<m;i++)  {if (s[i]) document.write('最后是第'+(i+1)+'个人没有出列<br>出列次序为:')}; 
    for(j=0;j<m-1;j++) document.write(order[j]+',');document.write(i);
    </script>
      

  4.   

    更正:最后打印结果的时候出了点小错误:
    //打印那个没有出列的人
    for(i=0;i<m;i++){
    if (s[i]){
    document.write('最后是第'+(++i)+'个人没有出列<br>出列次序为:') 
    break;
    }
    }
    //打印出列顺序
    for(j=0;j<m-1;j++) document.write(order[j]+',');document.write(i);
      

  5.   

    <script language=javascript>
    function getthelastone(n)
    {
    if (n<3) //如果人数小于3
    {
    alert(n+"个人的话,最后一个是第"+n);
    return
    }
    a=2;
    for (var i=3;i<=n;i++)  //以下两句为数列的递推公式
    {
    a=(a+3)%i;  
    if (a==0) a=i;
    }
    alert((i-1)+"个人的话,最后一个是第"+a);
    }
    getthelastone(13)</script>
      

  6.   

    <script language=javascript>
    function getthelastone(n)
    {
    if (n<3) return n;
    a=2;
    for (var i=3;i<=n;i++)  //以下两句为数列的递推公式
    {
    a=(a+3)%i;  
    if (a==0) a=i;
    }
    return a;
    }
    alert(getthelastone(5));
    </script>
      

  7.   

    //再来一个function f(m,n)
    {
    a=1;
    for (var i=2;i<=m;i++)
    {
    a=(a+n%i)%i;
    if (a==0) a=i;
    }
    alert(m+"个人,数"+n+"的人出局,最后一个人是第"+a+"个人。");
    }f(100000,10);