有趣的程序-2011年09月15日(原创+转载)

来源:互联网 发布:淘宝卡价格刷单 编辑:程序博客网 时间:2024/05/19 17:48

 
出圈问题:出圈,n个围成一圈,数到第m个人出圈,再从m个人的下一个人数,依次循环。并打印出出圈的人。

public class Ysf{

  public static void main(String[] args){

 int n=10,m=2;

 int outNum=0;

 int tmp=m;

 int index=0;

 boolean countOne=false;

 int a[]=new int[n];

 for(int i=0;i<a.length;i++)

  {a[i]=i+1;}

 

 while(outNum<n){//出圈的人数小于总人数

  tmp=m;

  while(tmp>0){//还没数到m

   countOne=false;

   while(!countOne){//数一个有效的人

    if(a[index]!=-1){//如果这个人没有出圈,则这个计数有效,否则跳过这个人,直到数到下一个有效的人。

     countOne=true;

    }

    index+=1;

     if(index>n-1)

      index=index-n;

   }

   tmp--;

  }

  index-=1;//因为数到有效的人后,index仍然自增了,所以要-1,确定出圈的人。

  if(index<0)

   index=n-1;

  System.out.println(""+a[index]);

  outNum++;

  a[index]=-1;//表示这个人已经出圈了

 

 }

  }

}

原创粉丝点击