发个简单点的吧: public static void main(String[] args) { int i,j = 0; for(i = 2; i <= 500; i++) {
j = (j+3)%i; } System.out.println(j+1);
}
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!"); } } 这代码是网上找的,楼主自己学习吧
南京北大青鸟java培训 24小..
北大青鸟秉承“教育改变生活”的理念!以学员优质就业为目标.入学即..
www.js-btesting.com
北大青鸟(南京普雷)java培训..
北大青鸟集团是北京大学四大校办产业支柱之一.7年运营,已培训近万..
www.pledu.com
无锡北大青鸟java培训 专业..
无锡北大青鸟java培训课程,高薪聘请名师讲解,小班教学,带薪实习,本..
www.wxaccp.com
徐州北大青鸟java培训
徐州北大青鸟java培训,首选中博!TEL:0516-85629999.淮海区首家北大..
www.zbaccp.com
北大青鸟java培训
北大青鸟java培训.北大青鸟ACCP课程会帮助您!凭借自身优良的教学与..
www.njxt.cn
苏州三香路北大青鸟 培养了5..
北大青鸟(苏州java培训)培训中心,多年来致力于培养JAVA软件工程师...
www.sz-accp.com.cn
约瑟夫问题!
import java.util.*;
public class Yuesefu {
public static void main(String[] args) {
LinkedList a1=new LinkedList();//a1实现的是队列的功能
Integer i1=null;
for(int i=1;i<=30;i++){
a1.add(new Integer(i));//将1到30追加到LinkedLise中
}
for(int k=0;k<15;k++){//从1开始记数,第9个数字被删除,一共删除15个数字
for(int j=1;j<9;j++){
i1=(Integer)a1.poll();
a1.offer(i1);
}
a1.poll();
}
for(int l=0;l<15;l++){
System.out.println("教徒排在"+a1.poll().toString());//打印
}
}
}
楼主改一下就可以了
上面的贴错了。解决约瑟夫问题使用List比较简单,
只要抓住核心代码就可以了
int i,j = 0;
for(i = 2; i <= 500; i++) {
j = (j+3)%i;
}
System.out.println(j+1);
}
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!");
}
}
这代码是网上找的,楼主自己学习吧
想法一:
可用数组来做,数到3的其对应的数组元素置为0或其他的,即把数到3的那个元素给标记了,数到最后一个没做标记的,即是结果。
在java里既可用ArrayList实现,不过用Map的HashMap<K,V> 键和值对应关系来做更好。
想法二:
可用LinkedList或LinkedHashMap<K,V>来做,既模拟c++里的链表,数到3的那个元素,即从链表中删除掉,最后链表中只剩一个元素,即为所求。