之前没有发现这是一本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;
}