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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北极£莜蓝 中级黑马   /  2014-5-31 23:16  /  2147 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

8 个回复

倒序浏览
在编程之前先考虑事件本身,事件解决方案是先让猫过河,然后让鱼过河,返回的时候带上猫,再将狗过河,最后将猫过河;
回复 使用道具 举报 1 0
  1. public class guohe {
  2.         public static void main(String[] args)
  3.         {
  4.                 String[] aa={"猫","鱼","狗"};
  5.                 String[] bb=new String[3];
  6.                 bb[0]=aa[0];
  7.                 aa[0]=null;
  8.                 bb[1]=aa[1];
  9.                 aa[1]=null;
  10.                 aa[0]=bb[0];
  11.                 bb[0]=null;
  12.                 bb[2]=aa[2];
  13.                 aa[2]=null;
  14.                 bb[0]=aa[0];
  15.                 aa[0]=null;
  16.                 System.out.println("河a="+aa[0]+aa[1]+aa[2]+",河b="+bb[0]+bb[1]+bb[2]);               
  17.         }

  18. }
复制代码

这个怎么样?
回复 使用道具 举报

又看了眼,感觉自己没有运用编程思路,而只是单纯的过河。

哎,我也是菜鸟。想不出来了。
回复 使用道具 举报
import java.util.ArrayList;
import java.util.List;

public class Goriver {

        public static void main(String[] args) {

                List<String> list1 = new ArrayList<String>();
                List<String> list2 = new ArrayList<String>();
                list1.add("dog");
                list1.add("fish");
                list1.add("cat");
                goRiver(list1,list2);
        }
       
        public static void goRiver(List<String> list1,List<String> list2){               
               
                while(list2.size()!=3){//list2的长度为三说明过河成功
                        if(isSafe(list2)==1&&isSafe(list1)==1)//当两岸都安全,moveTo
                                moveTo(list1,list2);
                        else if(isSafe(list2)==0)//当过河后不安全,moveBack
                                moveBack(list1,list2);
                        else
                                moveTo(list1,list2);//开始时,moveTo
                       
                }
                System.out.println("成功过河");
                       
               
        }
        /*        从此岸去彼岸 list1---->list2*/
        public static void moveTo(List<String> list1,List<String> list2){
                String str = list1.get(0);
                list1.remove(str);
                list2.add(str);
               
                if(isSafe(list1)==0){//如果带走选中的之后,此岸不安全,放回
                        list1.add(str);
                        list2.remove(str);
                        moveTo(list1,list2);//带新的过河
                }
                else //打印带什么个过河
                        System.out.println("老农带着"+str+"去对岸");
        }
        /*        从彼岸回来list2---->list1*/
        public static void moveBack(List<String> list1,List<String> list2){
                String str = list2.get(0);
                list2.remove(str);
                list1.add(str);
               
                if(isSafe(list2)==0){//如果带走选中的之后,此岸不安全,放回
                        list2.add(str);
                        list1.remove(str);
                        moveBack(list1,list2);//带新的过河
                }
                else//打印带什么过河
                        System.out.println("老农带着"+str+"从对岸回来");
                       
        }
        public static int isSafe(List<String> list){
                if(list.contains("dog")&&list.contains("cat")
                                || list.contains("cat")&&list.contains("fish"))//判断条件,岸边不安全
                        return 0;                       
                else return 1;
        }

}




PS:注释写的不是很多很全面,将就看吧。
回复 使用道具 举报
建议楼主先自学,

学完集合再遇此题,

定如关羽过关,挥刀即过。

其实面向对象编程很贴近生活,
只是我们没有在生活中注意到这些。

慢慢融入计算机编程语言, 慢慢的就能用编程语言来表达自己,

就好比过情人节,过光棍节,各位大神都是 new 一个女朋友。   哈哈。
回复 使用道具 举报 1 0
彭飞 发表于 2014-6-1 15:46
建议楼主先自学,

学完集合再遇此题,

谢谢,了,刚开始学编程.节日快乐
回复 使用道具 举报
小白路过看看
回复 使用道具 举报
来自沙沙的我 发表于 2014-6-1 00:35
又看了眼,感觉自己没有运用编程思路,而只是单纯的过河。

哎,我也是菜鸟。想不出来了。 ...

谢谢.比我强多了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马