c语言程序设计跪求答案
描述:有三个商人带着三个随从和货物过河,船每次最多只能载两个人,由他们自己划行,并且如何乘船渡河的大权由商人掌握。要求保证在过河期间的任一岸上商人的人数要大于或等于随从的人数,否则随从会杀死商人抢走货物。设计一个符合上述要求的商人过河的游戏。
要求:
(1)有游戏规则提示,按任意键开始游戏,按“Q”键退出游戏;
(2)程序开始,分别提示每次从河岸这边到那边、从河岸那边到这边的商人和随从人数;
(3)如果输入错误(如一次输入的人数不得超过2个、过河的人数不得超过2个),则提示错误并且按任意键重新开始游戏;
(4)当任一河岸的商人数小于随从数时,提示商人被杀,按任意键继续游戏;
(5)当游戏成功时提示游戏成功,按任意键结束游戏。
(6)每一局游戏要求保存游戏数据到out<N>.dat文件(0<=N<=9),最大保存最近10局游戏数据。
(7)设计全屏幕显示控制程序。
追问:这个问题我现在还不能验证,稍晚点验证还有两道题能不能?麻烦一下?\
你想要多少分呢?
http://wenwen.zzzyk.com/z/q330070640.htm
http://wenwen.zzzyk.com/z/q330069686.htm
答案:*/
import java.util.*;
public class Test4{
/**内部类,用来把保存过河过程中的路线和状态.
* 五个属性:
* to为ture表示去对岸,否则表示从对岸返回。同时true也表示船在本岸,false表示船在对岸.
* busiMansInBoat为在船里的商人数.
* servsInBoat为船里的仆人数.
* residualBusiMans为岸上的商人数,to为true时,表示是本岸.
* residualServants为岸上的仆人数,to为true时,表示是本岸.
*/
static class Path{
boolean to;
int busiMansInBoat;
int servsInBoat;
int residualBusiMans;
int residualServants;
Path(boolean to,int bmib,int sib,int rb,int rs){
this.to=to;
busiMansInBoat=bmib;
servsInBoat=sib;
residualBusiMans=rb;
residualServants=rs;
}
/*比较两个状态是不是相同.
*/
public boolean equals(Path p){
if(to==p.to){
return busiMansInBoat==p.busiMansInBoat&&servsInBoat==p.servsInBoat
&&residualBusiMans==p.residualBusiMans&&residualServants==p.residualServants;
}else if(to){
return busiMansInBoat==p.busiMansInBoat&&servsInBoat==p.servsInBoat
&&residualBusiMans==3-p.residualBusiMans-p.busiMansInBoat&&residualServants==3-p.residualServants-p.servsInBoat;
}else{
return busiMansInBoat==p.busiMansInBoat&&servsInBoat==p.servsInBoat
&&3-residualBusiMans-busiMansInBoat==p.residualBusiMans&&3-residualServants-servsInBoat==p.residualServants;
}
}
public String toString(){
if(to){
return "本岸(商人"+residualBusiMans+"个,仆人"+residualServants+"个)----->"
+"[船上:"+busiMansInBoat+"个商人,"+servsInBoat+"个仆人]----->"
+"对岸(商人"+(3-residualBusiMans-busiMansInBoat)+"个,仆人"+(3-residualServants-servsInBoat)+"个)";
}else{
return "本岸(商人"+(3-residualBusiMans-busiMansInBoat)+"个,仆人"+(3-residualServants-servsInBoat)+"个)<-----"
+"[船上:"+busiMansInBoat+"个商人,"+servsInBoat+"个仆人]<-----"
+"对岸(商人"+residualBusiMans+"个,仆人"+residualServants+"个)";
}
}
}
//保存路线的List
public static List<Path> pathList=new ArrayList<Path>();
/**过河方法.
* @param businessmans 商人数.
* @param servants 仆人数.
* @param schemes 方案集合.
* @param to 去还是返回,同时也表示是否在对岸.
*
*/
public static void passRiver(int businessmans,int servants,int[][] schemes,boolean to){
if(!to&&businessmans==3&&servants==3){
System.out.println("结果");
for(Path p : pathList){
System.out.println(p);
}
return;
}
int schemesStart=0; //从方案集中的那一种方案开始选择.
if(to){
schemesStart=2; //如果在本岸,则从第3种方案开始选择.
}
for(int i=schemesStart;i<schemes.length;i++){
int residualBusiMans=businessmans-schemes[i][0]; //按照方案岸上所剩商人数.
int residualServants=servants-schemes[i][1]; //按照方案岸上所剩仆人数.
if(residualBusiMans<0||residualServants<0){ //如果商人数或仆人数小于0,重新选择方案.
continue;
}
if(residualBusiMans!=0&&residualBusiMans<residualServants){ //如果仆人数大于商人数,重新选择方案.
continue;
}
if(3-residualBusiMans!=0&&3-residualBusiMans<3-residualServants){ //如果对岸的仆人数大于商人数,重新选择方案.
 
上一个:什么是C语言跟C++语言
下一个:怎么学好C语言和C++?