《算法竞赛入门(第二版)》--java实现.3.2字符数组.换抵挡装置

        之前没有发现这是一本C语言编写得书,但本人还未学习过C语言,只能尝试用java实现书中的代码,在此记录学习这本书的历程。

       本人新手菜鸟,能力有限,如果有误或者有改进的地方欢迎指出,谢谢\(▔▽▔)/。

题目:给出两个长度分别为n1,n2(n1,n2<=100)且每列高度只为1或2的长条。需要将它们放入一个高度为3的容器,问能够容纳它们的最短容器长度。

输入:          
2112112112

2212112

12121212

21212121

2211221122

21212

112221112

212111221

输出

10

8

5

10

注意:n1左右移动的不同会造成容器的最短长度不同!

    public static void main(String args[]) {
    	Scanner input = new Scanner(System.in);
        String line1 = input.nextLine();
        String line2 = input.nextLine();
        int number1 = findBox(line1,line2); //line2向右移动
        int number2 = findBox(line2,line1); //line2向左移动
        System.out.print(Math.min(number1, number2));//输出两种移动方式中总长度最小的
    }
    
    public static int findBox(String line1,String line2) {
        int first = 0;//记录line2在line1上的起始位置
        int length = line2.length();
        while(true) {
        	if(first == line1.length()) {//起始位置在line1之后,此时line1和line2无法重合
        		return line1.length() + length;
        	}
        	if(checkBox(first,line1,line2)) {
        		return Math.max(first + length, line1.length());
        	}else {
        		first++;
        		line2 = "0"+ line2;
        	}
        }
    }
    //检查高度和是否小于3
    public static boolean checkBox(int first,String line1,String line2) {
    	for(int i = first;i < Math.min(line1.length(), line2.length());i++) {
    		if(line1.charAt(i) - '0' + line2.charAt(i) - '0' > 3) {
    			return false;
    		}
    	}
    	return true;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值