一个小趣味程序求解 河岸边有三人和三鬼要渡河,鬼也能单独划船,且船上和岸边的鬼的人数不能大于人的个数,否则人就被鬼弄死,问怎么样用java来描述这个成功渡河每步过程 ,还有船上最多只能载两个 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // = =!!public class Test { public static void main(String[] args) { from.gs.add("鬼1"); from.gs.add("鬼2"); from.gs.add("鬼3"); from.ps.add("人1"); from.ps.add("人2"); from.ps.add("人3"); go(); } static Land from = new Land(); static Land to = new Land(); static Random r = new Random(System.nanoTime()); enum GO { End, Left, Rigth } public static void go() { GO g = GO.Rigth; while ((g = go(g)) != GO.End); System.out.println("完成"); } public static GO go(GO g) { if (g == GO.Rigth) { while (true) { switch (r.nextInt(4)) { case 0: if (from.ps.size() > 2 && from.gs.size() <= from.ps.size() - 2) { String s1 = from.ps.remove(r.nextInt(from.ps.size())); String s2 = from.ps.remove(r.nextInt(from.ps.size())); System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + ""); to.ps.add(s1); to.ps.add(s2); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Left; } break; case 1: case 2: if (!from.ps.isEmpty() && !from.gs.isEmpty()) { if (from.ps.size() - 1 >= from.gs.size() - 1) { String s1 = from.ps.remove(r.nextInt(from.ps.size())); String s2 = from.gs.remove(r.nextInt(from.gs.size())); System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + ""); to.ps.add(s1); to.gs.add(s2); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Left; } } break; case 3: if (from.gs.size() > 1 && to.ps.size() >= to.gs.size() + 1) { String s1 = from.gs.remove(r.nextInt(from.gs.size())); String s2 = from.gs.remove(r.nextInt(from.gs.size())); System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + ""); to.gs.add(s1); to.gs.add(s2); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Left; } break; } } } else { while (true) { switch (r.nextInt(2)) { case 0: if (!to.ps.isEmpty() && to.ps.size() - 1 >= to.gs.size()) { String s1 = to.ps.remove(r.nextInt(to.ps.size())); System.out.println("" + from.ps + "," + from.gs + "<-" + s1 + "-" + to.ps + "," + to.gs + ""); from.ps.add(s1); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Rigth; } break; case 1: if (!to.gs.isEmpty()) { String s1 = to.gs.remove(r.nextInt(to.gs.size())); System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "- " + to.ps + "," + to.gs + ""); from.gs.add(s1); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Rigth; } break; } } } }}class Land { List<String> ps = new ArrayList<>(); List<String> gs = new ArrayList<>();} //这次不会错了吧 public static void main(String[] args) { from.gs.add("鬼1"); from.gs.add("鬼2"); from.gs.add("鬼3"); from.ps.add("人1"); from.ps.add("人2"); from.ps.add("人3"); go(); } static Land from = new Land(); static Land to = new Land(); static Random r = new Random(System.nanoTime()); enum GO { End, Left, Rigth } public static void go() { GO g = GO.Rigth; System.out.println("开始"); System.out.println("" + from.ps + "," + from.gs + " - - " + to.ps + "," + to.gs); while ((g = go(g)) != GO.End); System.out.println("完成"); } public static GO go(GO g) { if (g == GO.Rigth) { while (true) { switch (r.nextInt(4)) { case 0: case 1: // - pp -> if (from.ps.size() > 1) { //from没有鬼 || 刚刚有二个人 || 去了二个人后,还是>=鬼的数 if (from.gs.size() <= from.ps.size() - 2 || from.ps.size() == 2 || from.gs.isEmpty()) { String s1 = from.ps.remove(r.nextInt(from.ps.size())); String s2 = from.ps.remove(r.nextInt(from.ps.size())); System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + ""); to.ps.add(s1); to.ps.add(s2); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Left; } } break; // - pg -> case 2: if (!from.gs.isEmpty() && !from.ps.isEmpty()) { //from 到 to 后,二边人的数都>=鬼数 if (to.ps.size() - 1 >= to.gs.size() - 1 && from.ps.size() + 1 >= from.gs.size() + 1) { String s1 = from.ps.remove(r.nextInt(from.ps.size())); String s2 = from.gs.remove(r.nextInt(from.gs.size())); System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + ""); to.ps.add(s1); to.gs.add(s2); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Left; } } break; case 3: // - gg -> if (from.gs.size() >= 2) { //to没有人 || from 的人数>=鬼数 if ((to.ps.isEmpty() || to.ps.size() >= to.gs.size() + 2)) { String s1 = from.gs.remove(r.nextInt(from.gs.size())); String s2 = from.gs.remove(r.nextInt(from.gs.size())); System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + ""); to.gs.add(s1); to.gs.add(s2); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Left; } } break; } } } else { while (true) { switch (r.nextInt(6)) { //<- p - case 0: case 1: if (to.ps.size() >= 1) { if (to.ps.size() - 1 >= to.gs.size() && from.ps.size() + 1 >= from.gs.size()) { String s1 = to.ps.remove(r.nextInt(to.ps.size())); System.out.println("" + from.ps + "," + from.gs + "<-" + s1 + "-" + to.ps + "," + to.gs + ""); from.ps.add(s1); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Rigth; } } break; //<- g - case 2: if (to.gs.size() > 0) { if (from.ps.size() >= from.gs.size() + 1 || from.ps.isEmpty()) { String s1 = to.gs.remove(r.nextInt(to.gs.size())); System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "- " + to.ps + "," + to.gs + ""); from.gs.add(s1); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Rigth; } } break; //<- pp - case 3: if (to.ps.size() > 1) { if ((to.ps.size() - 2 >= to.gs.size() && from.ps.size() + 2 >= from.gs.size()) || to.ps.size() == 2 || to.gs.isEmpty()) { String s1 = to.ps.remove(r.nextInt(to.ps.size())); String s2 = to.ps.remove(r.nextInt(to.ps.size())); System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "," + s2 + "- " + to.ps + "," + to.gs + ""); from.ps.add(s1); from.ps.add(s2); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Rigth; } } break; //<- gg - case 4: if (to.gs.size() > 1) { if (from.ps.size() >= from.gs.size() + 2 || to.ps.isEmpty()) { String s1 = to.gs.remove(r.nextInt(to.gs.size())); String s2 = to.gs.remove(r.nextInt(to.gs.size())); System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "," + s2 + "- " + to.ps + "," + to.gs + ""); from.gs.add(s1); from.gs.add(s2); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Rigth; } } break; //<- pg - case 5: if (!to.gs.isEmpty() && !to.ps.isEmpty()) { if (to.ps.size() - 1 >= to.gs.size() - 1 && from.ps.size() + 1 >= from.gs.size() + 1) { String s1 = to.ps.remove(r.nextInt(to.ps.size())); String s2 = to.gs.remove(r.nextInt(to.gs.size())); System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "," + s2 + "- " + to.ps + "," + to.gs + ""); from.ps.add(s1); from.gs.add(s2); if (from.ps.isEmpty() && from.gs.isEmpty()) { return GO.End; } return GO.Rigth; } } break; } } } }}class Land { List<String> ps = new ArrayList<>(); List<String> gs = new ArrayList<>();} int float数值转换 dom4j解析问题!(牛人帮忙啊 !在线等!)selectSingleNode报错! java中如何判断一个文件是二进制文件还是ASCII文件? 怎么分别打印出所有的简体汉字,繁体汉字。 怎么对socket输出的信息以byte方式输出,接收以后再转为原类型 java打完包之后为什么读取不了文件了? 谁帮我看一下程序,谢谢! JB新手问题:Start未初始化程Applet小程序?怎么办? 谁来解忧!! java中如何进行打印? 怎么在person类实现implements interface abstract 刚学完面向对象 书上有个选择题不理解 求解
// = =!!
public class Test {
public static void main(String[] args) {
from.gs.add("鬼1");
from.gs.add("鬼2");
from.gs.add("鬼3");
from.ps.add("人1");
from.ps.add("人2");
from.ps.add("人3");
go();
}
static Land from = new Land();
static Land to = new Land();
static Random r = new Random(System.nanoTime()); enum GO { End, Left, Rigth
} public static void go() {
GO g = GO.Rigth;
while ((g = go(g)) != GO.End);
System.out.println("完成");
} public static GO go(GO g) {
if (g == GO.Rigth) {
while (true) {
switch (r.nextInt(4)) {
case 0:
if (from.ps.size() > 2 && from.gs.size() <= from.ps.size() - 2) {
String s1 = from.ps.remove(r.nextInt(from.ps.size()));
String s2 = from.ps.remove(r.nextInt(from.ps.size()));
System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + "");
to.ps.add(s1);
to.ps.add(s2);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Left;
}
break;
case 1:
case 2:
if (!from.ps.isEmpty() && !from.gs.isEmpty()) {
if (from.ps.size() - 1 >= from.gs.size() - 1) {
String s1 = from.ps.remove(r.nextInt(from.ps.size()));
String s2 = from.gs.remove(r.nextInt(from.gs.size()));
System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + "");
to.ps.add(s1);
to.gs.add(s2);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Left;
}
}
break;
case 3:
if (from.gs.size() > 1 && to.ps.size() >= to.gs.size() + 1) {
String s1 = from.gs.remove(r.nextInt(from.gs.size()));
String s2 = from.gs.remove(r.nextInt(from.gs.size()));
System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + "");
to.gs.add(s1);
to.gs.add(s2);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Left;
}
break;
}
}
} else {
while (true) {
switch (r.nextInt(2)) {
case 0:
if (!to.ps.isEmpty() && to.ps.size() - 1 >= to.gs.size()) {
String s1 = to.ps.remove(r.nextInt(to.ps.size()));
System.out.println("" + from.ps + "," + from.gs + "<-" + s1 + "-" + to.ps + "," + to.gs + "");
from.ps.add(s1);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Rigth;
}
break;
case 1:
if (!to.gs.isEmpty()) {
String s1 = to.gs.remove(r.nextInt(to.gs.size()));
System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "- " + to.ps + "," + to.gs + "");
from.gs.add(s1);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Rigth;
}
break;
}
}
}
}
}class Land { List<String> ps = new ArrayList<>();
List<String> gs = new ArrayList<>();
}
//这次不会错了吧
public static void main(String[] args) {
from.gs.add("鬼1");
from.gs.add("鬼2");
from.gs.add("鬼3");
from.ps.add("人1");
from.ps.add("人2");
from.ps.add("人3");
go();
}
static Land from = new Land();
static Land to = new Land();
static Random r = new Random(System.nanoTime()); enum GO { End, Left, Rigth
} public static void go() {
GO g = GO.Rigth;
System.out.println("开始");
System.out.println("" + from.ps + "," + from.gs + " - - " + to.ps + "," + to.gs);
while ((g = go(g)) != GO.End);
System.out.println("完成");
} public static GO go(GO g) {
if (g == GO.Rigth) {
while (true) {
switch (r.nextInt(4)) {
case 0:
case 1:
// - pp ->
if (from.ps.size() > 1) {
//from没有鬼 || 刚刚有二个人 || 去了二个人后,还是>=鬼的数
if (from.gs.size() <= from.ps.size() - 2 || from.ps.size() == 2 || from.gs.isEmpty()) {
String s1 = from.ps.remove(r.nextInt(from.ps.size()));
String s2 = from.ps.remove(r.nextInt(from.ps.size()));
System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + "");
to.ps.add(s1);
to.ps.add(s2);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Left;
}
}
break;
// - pg ->
case 2:
if (!from.gs.isEmpty() && !from.ps.isEmpty()) {
//from 到 to 后,二边人的数都>=鬼数
if (to.ps.size() - 1 >= to.gs.size() - 1 && from.ps.size() + 1 >= from.gs.size() + 1) {
String s1 = from.ps.remove(r.nextInt(from.ps.size()));
String s2 = from.gs.remove(r.nextInt(from.gs.size()));
System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + "");
to.ps.add(s1);
to.gs.add(s2);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Left;
}
}
break;
case 3:
// - gg ->
if (from.gs.size() >= 2) {
//to没有人 || from 的人数>=鬼数
if ((to.ps.isEmpty() || to.ps.size() >= to.gs.size() + 2)) {
String s1 = from.gs.remove(r.nextInt(from.gs.size()));
String s2 = from.gs.remove(r.nextInt(from.gs.size()));
System.out.println("" + from.ps + "," + from.gs + " -" + s1 + "和" + s2 + "-> " + to.ps + "," + to.gs + "");
to.gs.add(s1);
to.gs.add(s2);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Left;
}
}
break;
}
}
} else {
while (true) {
switch (r.nextInt(6)) {
//<- p -
case 0:
case 1:
if (to.ps.size() >= 1) {
if (to.ps.size() - 1 >= to.gs.size() && from.ps.size() + 1 >= from.gs.size()) {
String s1 = to.ps.remove(r.nextInt(to.ps.size()));
System.out.println("" + from.ps + "," + from.gs + "<-" + s1 + "-" + to.ps + "," + to.gs + "");
from.ps.add(s1);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Rigth;
}
}
break;
//<- g -
case 2:
if (to.gs.size() > 0) {
if (from.ps.size() >= from.gs.size() + 1 || from.ps.isEmpty()) {
String s1 = to.gs.remove(r.nextInt(to.gs.size()));
System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "- " + to.ps + "," + to.gs + "");
from.gs.add(s1);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Rigth;
}
}
break;
//<- pp -
case 3:
if (to.ps.size() > 1) {
if ((to.ps.size() - 2 >= to.gs.size() && from.ps.size() + 2 >= from.gs.size()) || to.ps.size() == 2 || to.gs.isEmpty()) {
String s1 = to.ps.remove(r.nextInt(to.ps.size()));
String s2 = to.ps.remove(r.nextInt(to.ps.size()));
System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "," + s2 + "- " + to.ps + "," + to.gs + "");
from.ps.add(s1);
from.ps.add(s2);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Rigth;
}
}
break;
//<- gg -
case 4:
if (to.gs.size() > 1) {
if (from.ps.size() >= from.gs.size() + 2 || to.ps.isEmpty()) {
String s1 = to.gs.remove(r.nextInt(to.gs.size()));
String s2 = to.gs.remove(r.nextInt(to.gs.size()));
System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "," + s2 + "- " + to.ps + "," + to.gs + "");
from.gs.add(s1);
from.gs.add(s2);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Rigth;
}
}
break;
//<- pg -
case 5:
if (!to.gs.isEmpty() && !to.ps.isEmpty()) {
if (to.ps.size() - 1 >= to.gs.size() - 1 && from.ps.size() + 1 >= from.gs.size() + 1) {
String s1 = to.ps.remove(r.nextInt(to.ps.size()));
String s2 = to.gs.remove(r.nextInt(to.gs.size()));
System.out.println("" + from.ps + "," + from.gs + " <-" + s1 + "," + s2 + "- " + to.ps + "," + to.gs + "");
from.ps.add(s1);
from.gs.add(s2);
if (from.ps.isEmpty() && from.gs.isEmpty()) {
return GO.End;
}
return GO.Rigth;
}
}
break;
}
}
}
}
}class Land { List<String> ps = new ArrayList<>();
List<String> gs = new ArrayList<>();
}