A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马嘉   /  2014-8-20 08:48  /  2616 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

先把猫带过去,回来把狗带过去,回来时把猫带回,不让猫狗同时在对岸,回来后再把鱼带过去,再回来把猫再带过去,这样猫狗鱼都带过去啦
回复 使用道具 举报
这是我刚做的基础测试题。。。。楼主请参考。:handshake

  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;

  5. /*
  6. *         第十题:
  7.         一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
  8.         当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。
  9.         编程解决猫狗鱼过河问题。


  10. */
  11. public class Test10 {

  12.         public static void main(String[] args)
  13.         {
  14.                         Test10 itheima=new Test10();
  15.                         itheima.crossRiver();
  16.         }
  17.        
  18.         List<String> start=new ArrayList<String>();//定义起始地和目的地
  19.         List<String> end=new ArrayList<String>();
  20.        
  21.         public Test10() //程序初始化,加载农夫和动物
  22.         {
  23.                 start.add("farmer");
  24.                 start.add("cat");
  25.                 start.add("dog");
  26.                 start.add("fish");
  27.         }
  28.        
  29.         public void crossRiver()
  30.         {
  31.                 while(!start.isEmpty())//当起始地还存在动物则一直尝试带动物过河
  32.                 {
  33.                         while(start.size()>2)//当起始地还存在两个以上动物时,则一直尝试带第一个动物过河
  34.                         {
  35.                                 Random random =new Random();
  36.                                 start.remove("farmer");//农夫过河,并随机在剩下3个中带走一个
  37.                                 int index01=random.nextInt(3);//生成0~2的随机下标
  38.                                 String animal01=start.get(index01);
  39.                                 start.remove(index01);//带走该动物
  40.                                
  41.                                 if(judgeAlive(start))//判断起始地剩下的动物是否和谐
  42.                                 {
  43.                                         System.out.println("第一次带走"+animal01+"----");
  44.                                         end.add(animal01);
  45.                                         System.out.println(animal01+"成功到达目的地!农夫准备返回----");
  46.                                        
  47.                                        
  48.                                 }
  49.                                 else //不和谐则返回随机抽取起始地剩下2个动物,然后放回animl01
  50.                                 {
  51.                                         System.out.println("先带走"+animal01+",发现起始地剩下两个动物不能和谐共存,只能带回,重新再选择一只----");
  52.                                         int index02=random.nextInt(2);
  53.                                         String animal02=start.get(index02);
  54.                                         start.remove(index02);
  55.                                         start.add(animal01);
  56.                                        
  57.                                         if(judgeAlive(start))
  58.                                         {
  59.                                                 System.out.println("这次带走"+animal02+",剩下2个可以和谐共存!农夫返回继续带动物过河----");
  60.                                                 end.add(animal02);
  61.                
  62.                                         }
  63.                                         else //不和谐则返回抽取起始地2个动物中最后一个没被带走过的动物。
  64.                                         {
  65.                                                 System.out.println("第二次带走"+animal02+",发现剩下2个无法和谐共存,再次返回换一只----");
  66.                                                 int index03= 1-start.indexOf(animal01);//先获取第一次被抽取的动物的角标,则另外一个动物角标为1-start.indexOf(animal01)
  67.                                                 String animal03=start.get(index03);
  68.                                                 start.remove(index03);//带走
  69.                                                 end.add(animal03);
  70.                                                 start.add(animal02);//将第二次带走的动物放回
  71.                                                
  72.                                                 System.out.println("第三次带走"+animal03+"剩下2个可以和谐共存----");
  73.                                                 System.out.println(animal03+"成功到达目的地!农夫准备返回带下一只----");
  74.                                         }
  75.                                        
  76.                                 }
  77.                         }
  78.                         while(start.size()>1)//当起始地还剩下1只以上动物时,则不停地尝试
  79.                         {
  80.                                 Random random=new Random();
  81.                                 int index04=random.nextInt(1);//在剩下两个中随机抽取一个带过去
  82.                                 String animal04=start.get(index04);
  83.                                 start.remove(index04);
  84.                                 end.add(animal04);//带到目的地之后判断目的地2个动物是否能和谐共存
  85.                                 if(judgeAlive(end))
  86.                                 {
  87.                                         System.out.println("将"+animal04+"带过河,目的地2只可以和谐共存!,返回带第三只----!");
  88.                                 }
  89.                                 else
  90.                                 {
  91.                                         System.out.println("这一次将"+animal04+"带至目的地之后,2只动物无法和谐共存,老农只得将其带回,换一只带至目的地----");
  92.                                         end.remove(animal04);
  93.                                         String animal05=start.get(0);
  94.                                         start.remove(0);
  95.                                         start.add(animal04);//将之前带过去的放回
  96.                                         end.add(animal05);//将animol05带至目的地
  97.                                         if(judgeAlive(end))
  98.                                         {
  99.                                                 System.out.println("将"+animal05+"带过河,目的地2只可以和谐共存!,返回带第三只----!");
  100.                                         }
  101.                                         else
  102.                                         {
  103.                                                 String animal06=end.get(1-end.indexOf(animal05));
  104.                                                 System.out.println("此次带过来的"+animal05+"也无法和"+animal06+"共存··老农只能留下"+animal05+",将"
  105.                                                                 + animal06+"带回至起始地----");
  106.                                                 end.remove(animal06);
  107.                                                 System.out.println("老农回到起始地,将"+animal04+"再次带过河,并将"+animal06+"先留下----");
  108.                                                 start.remove(animal04);
  109.                                                 start.add(animal06);
  110.                                                 end.add(animal04);
  111.                                                
  112.                                                 if(judgeAlive(end))
  113.                                                 {
  114.                                                         System.out.println("目的地"+animal04+","+animal05+"可以和谐共存,老农返回带最后一只----!");
  115.                                                 }
  116.                                                 else
  117.                                                 {
  118.                                                         System.out.println("老农没辙,强逼鱼自己游过去----");
  119.                                                 }
  120.                                                
  121.                                         }
  122.                                 }
  123.                         }
  124.                         String animal07=start.get(0);
  125.                         start.remove(0);
  126.                         end.add("farmer");
  127.                         end.add(animal07);
  128.                         System.out.println("老农成功将"+animal07+"带至目的地,大家成功过河!!!----");
  129.                 }
  130.         }
  131.        
  132.        
  133.         public boolean judgeAlive(List<String>arr)//判断是否和谐
  134.         {
  135.                 if(((arr.size()==2)&&arr.contains("cat")&&arr.contains("dog"))||
  136.                   ((arr.size()==2)&&arr.contains("cat")&&arr.contains("fish")))
  137.                 {
  138.                         return false;
  139.                 }
  140.                 else
  141.                 {
  142.                         return true;
  143.                 }
  144.         }
  145.        
  146. }
复制代码
回复 使用道具 举报
回复 使用道具 举报
dhgcy 中级黑马 2014-8-31 13:55:21
24#
谢谢分享  
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马