黑马程序员技术交流社区

标题: 我遇到的黑马测试题(持续更新中) [打印本页]

作者: 479308606    时间: 2015-8-5 17:53
标题: 我遇到的黑马测试题(持续更新中)
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;
                }                       
        }
}
作者: 479308606    时间: 2015-8-5 17:56
这题算是很难的了
作者: thoris    时间: 2015-8-5 18:34
不错  写得挺易懂的~
作者: 3174918418    时间: 2015-8-5 22:24
谢谢解说
作者: 479308606    时间: 2015-8-6 18:23
3174918418 发表于 2015-8-5 22:24
谢谢解说

额。打个酱油。。为了进黑马啊
作者: 千山万水    时间: 2015-8-6 20:02
这题我也做过
作者: javaking    时间: 2015-8-6 20:12
额。还有这个题。。。
作者: 高山高水高小波    时间: 2015-8-6 20:27
这题需要用到什么知识啊
作者: 欧杰    时间: 2015-8-6 21:49
谢谢解说
作者: 欧杰    时间: 2015-8-6 21:52
谢谢解说
作者: 时光游戏    时间: 2015-8-6 21:58
赞一个,谢谢分享
作者: 晓月残魂    时间: 2015-8-6 22:05
恩恩   三克油~~
作者: IT老鹰    时间: 2015-8-6 22:27
赞一个,谢谢分享,楼主好人




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2