m个人围成一圈,从第一个人开始数,每数到第六个数退出圈外。请依次打印出退出的人的号码!(如:数到第六个人,他退出,从第七个人开始数,依次数,直到全都退出)
解决方案 »
- 这个怎么弄啊
- JTabbedPane中动态加载一个JPanel的问题,在线等,大家帮帮忙。
- 关于Process类的waitFor()方法。
- 非法的表达式开始,这个是什么错误
- 关于swt的问题``请来帮我啊``
- 谁帮我看看网上提供的这个IP输入框第2,3,4个框无法响应啊!
- 各位大侠:如何将一个字符串变颜色或变字体?
- 多态问题求助
- 多谢Gja106/Takecare/flywing_ly/hk2000c/Hoxisoft 的帮忙,上一帖分少,请进来拿分。
- 如何,配置JAVA环境?
- Hashmap排序相关问题!谢谢!
- 用java写的对oracle进行update操作,但是为什么总会出游标用尽的情况啊
以前是只要求最后1个人,可以用数学方法简化再用java编写
for(int i=2;i<=m;i++){
r=(r+n)%i;
}r+1就是最后个,n是第n个退出
你可以baidu下
public static void main(String[] args){
int M,N;
M =20;
N =6;
boolean[] f =new boolean[M];
int r =M, n =1, i =0;
while(r>0){
if(!f[i]){
if(n==N){
f[i] =true;
r --;
System.out.println("第"+(i+1)+"号被踢");
n =1;
}
else n++;
}
i++;
if(i>=f.length) i=0;
}
}
}
說明
據說著名猶太歷史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下一個重新報數,直到所有人都自殺身亡為止。然而Josephus 和他的朋友並不想遵從,Josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,於是逃過了這場死亡遊戲。public class Josephus { public static int[] arrayOfJosephus( int number, int per) { int[] man = new int[number]; for(int count = 1, i = 0, pos = -1; count <= number; count++) { do { pos = (pos+1) % number; // 環狀處理 if(man[pos] == 0) i++; if(i == per) { // 報數為3了 i = 0; break; } } while(true); man[pos] = count; } return man; } public static void main(String[] args) { int[] man = Josephus.arrayOfJosephus(41, 3); int alive = 3; System.out.println("約琴夫排列:"); for(int i = 0; i < 41; i++) System.out.print(man[i] + " "); System.out.println("\nL表示3個存活的人要放的位置:"); for(int i = 0; i < 41; i++) { if(man[i] > alive) System.out.print("D"); else System.out.print("L"); if((i+1) % 5 == 0) System.out.print(" "); } System.out.println(); }}
public static void main(String[] args) {
int m = 20, sx = m;
int a[] = new int[m];
for (int i = 1; i <= m; i++)
a[i - 1] = 1;
int i = 0, lj = 1;
while (sx > 0) {
i = ++i % m;
if (a[i] != 0)
lj++;
if (lj == 6) {
a[i] = 0;
sx--;
System.out.println(i + 1);
lj = 0;
}
}
}
}