java吧 关注:1,218,376贴子:12,668,633
  • 1回复贴,共1

圆桌问题,求解

只看楼主收藏回复

/*
一个圆桌围坐有50个人,编号按顺时针方向分别为0-49,
按顺时针首位相接报数,从1开始,若数到的数以3结尾或能被3整除,
则该人退出游戏,后面的人继续报数,
当首轮报数完成后,首次报数人接末次报数人继续累加报数,
直到剩下最后一个人,输出该人最开始的编号。(***)
*/
class Zuoye10
{
public static void main(String[] args)
{
int a[] = new int[50];
for (int i = 0;i<a.length ;i++ )
{
a[i] = i;
}
for(int i = 0 ;i < 50 ;i++)
{
System.out.print(a[i]);
}
System.out.println();
System.out.println("------------------------------------------------");
System.out.println("最后一个人的编号是:"+yuanZhuoYouXi(a));
}
public static int yuanZhuoYouXi(int m[])
{int d = 50,g = 1,f = 50;//d循环一次后下一次的结束长度,g循环一次后下一次开始的长度,d剩下的数
int k = 0;
int b[] = new int[m.length];
while(f>1)
{
int c = 0,e = 0;
for (int a=g ;a<=d ;a++ )
{
if(a%10==3||a%3==0)
{
++c;
}else
{
b[e] = m[a-g];
e++;
}
}
f -= c;
g = d+1;
d += f;
System.out.print("第"+(++k)+"轮剩下的人的分别编号是:");
for(int a=0 ;a<f ;a++)
{
m[a] = b[a];
System.out.print(m[a]+" ");
}
System.out.println();
System.out.println(c);
System.out.println(f);
}
return m[0];
}
}


IP属地:江西1楼2017-06-29 21:59回复
    这样结果是33,同学做的34,程序有错吗。


    IP属地:江西2楼2017-06-29 22:00
    回复