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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.itheima;

import java.util.ArrayList;
import java.util.List;

/**10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,
则不会发生这种问题。编程解决猫狗鱼过河问题。*/
/**
      2、定义函数检查当河岸边动物在无老农情况下是否产生动物损失情况;
*/
public class Test10 {

        public static void main(String[] args) {
                /**1、建立两个字符串集合ArrayList来存储河岸两边的动物们,
             初始时,动物全在河左岸,最终目的是要将河左岸的动物全部运到河右岸;*/
                List<String> left = new ArrayList<String>();
                List<String> right = new ArrayList<String>();
                left.add( "猫" );
                left.add( "狗" );
                left.add( "鱼" );
                //定义使用船的次数
                int useBoat = 0;
                String animal = null;
                // 4、如果河左岸动物为空,则循环结束。
                while( !left.isEmpty() ){
                        useBoat++;
                        animal = null;
                        /**当船使用次数为单数时老农在河右岸,只要老农带走的动物后剩下的动物不产生损失,
                    即将带走的动物添加去河右岸集合中;*/
                        if( 1 == useBoat % 2 ){
                                for( int i = 0; i < left.size(); i++ ){
                                        animal = left.remove( i );
                                        if( lossAnimal(left) ){
                                                left.add( animal );
                                                continue;
                                        }else{
                                                break;
                                        }
                                }
                                System.out.println( "第" + useBoat + "次, 老农用船将" + animal + "运到河右岸" );
                                right.add( animal );
                                /**船使用次数为偶数时老农在河左岸;如果河右岸动物们不会产生损失,
                            则老农不带动物回到左岸,否则带走动物保证河右岸动物的安全,将带走动物放回左岸。*/
                        }else {                       
                                while( lossAnimal(right) ){
                                        for( int i = 0; i < right.size(); i++ ){
                                                animal = right.remove( i );
                                                if( lossAnimal(right) ){
                                                        right.add( animal );
                                                        continue;
                                                }else{
                                                        break;
                                                }
                                        }
                                }
                                if( animal == null ){
                                        System.out.println( "第" + useBoat + "次, 老农用船回到河左岸" );
                                }else{
                                        System.out.println( "第" + useBoat + "次, 老农用船将" + animal + "运回河左岸" );
                                        left.add( animal );
                                }
                        }
                }
        }

        public static boolean lossAnimal( List<String> list ){
                if( list.contains("猫") && list.contains("狗") ){
                        return true;
                }else if( list.contains("猫") && list.contains("鱼") ){
                        return true;
                }else{
                        return false;
                }                       
        }
}

12 个回复

倒序浏览
这题算是很难的了
回复 使用道具 举报
不错  写得挺易懂的~
回复 使用道具 举报
谢谢解说
回复 使用道具 举报

额。打个酱油。。为了进黑马啊
回复 使用道具 举报
这题我也做过
回复 使用道具 举报
额。还有这个题。。。
回复 使用道具 举报
这题需要用到什么知识啊
回复 使用道具 举报
谢谢解说
回复 使用道具 举报
谢谢解说
回复 使用道具 举报
赞一个,谢谢分享
回复 使用道具 举报
恩恩   三克油~~
回复 使用道具 举报
赞一个,谢谢分享,楼主好人
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马