java 圆桌_约瑟夫问题求解释(圆桌问题)Java

publicclassJosephus{publicstaticvoidmain(Stringargs[]){if(args.length!=2)//处理参数数目不正确情况{System.out.println("PleaseInputanumber!");return;}inti,j,n,m;n=Integer.p...

public class Josephus

{

public static void main(String args[])

{

if(args.length != 2) //处理参数数目不正确情况

{

System.out.println("Please Input a number!");

return;

}

int i, j, n, m;

n = Integer.parseInt(args[0]);

m = Integer.parseInt(args[1]);

if (n <= 0 || m <= 0) //处理参数值不正确的情况

{

System.out.println("Paramter must bigger than zero!");

return;

}

int a[] = new int[n];

for (i = 0; i < n; i++) a[i] = i + 1;

int k = 1; //标识处理第k个离开的人

i = -1; //数组下标,下一个为0,即第一个人

while (true) //k等于n表示只剩下一个人了

{

for (j = 0; j < m;) //在圈中数m个人

{

i = (i + 1) % n;

if (a[i] >0) j++; //a[i] >0表示第i个人还没有离开

}

if(k==n) break;

System.out.println("No." + a[i] + " is out!");

a[i] = -1; //表示该人离开

k++;

}

System.out.println("No." + a[i] + " is the winner!");

}

}

主要是我不明白while循环里面语句的意思,希望能过尽量把原理说明白一点。多谢了

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值