java编程求解
2009人站成一排由左到右依次从1开始报数,报奇数的出列,报偶数的再站成一排由左到右依次从1开始报数,依次类推,最后只剩下一个人。问这个人在第一次报数中报的是多少?
要求:1.用java编程实现
2.本人初学java,要有详细的注释
------解决方案--------------------public class technics {
public static void main(String args[])
{
int n=2009,i,k=0,a[],total=1,l=1,m;
a=new int[1010];
while(n>=1)
{
for(i=1;i<=n;i++) //顺序报数,使每趟的奇数出列,偶数继续排队
{
if(i%2==0)
{
a[l++]=i;
}
l=1;
}
k++;
n=n/2;
}
for(m=1;m<=k+1;m++) //排列结束
{
a[1]*=2;
}
System.out.printf("这个人在第一次报的数是"+a[1]);
}
}
------解决方案--------------------Java code
public static void main(String ag[]) {
int[] array=new int[2009];
for(int i=2009;i>1;)
{
for(int j=0, k=0;j<2009;j++)
{
if(array[j]!=1)
{
if(k%2==0)
{
array[j]=1;
i--;
}
k++;
}
}
}
for(int i=0;i<2009;i++)
{
if(array[i]==0)
System.out.println(i+1);
}
}