我们有无限数量的盒子堆叠在彼此之上。 p =第一个堆栈的大小
每个堆栈都是" k"比之前的堆栈大。
For example: p=3 k=2
1,2,3
4,5,6,7,8
9,10,11,12,13,14,15
现在,分配是移动用户定义的一个框,并计算它移动到其上方的框数,以便移动该特定框。用户将继续插入数量的方框,在变量d中定义了多天。
所以输入就像这样:
p=3 k=2 d=3(3 days aka 3 boxes to move)
5 (Box 5)
3
12
输出将是:6 ....为什么?因为它必须移动3个盒子来获得盒子5个盒子,盒子3个盒子和盒子12个盒子。
希望您了解这个概念,但我一直在努力将所有这些都正确地放入代码中。我在作业的某些方面取得了成功,但它似乎并没有正常运作。
它正确地给了我一系列的方框......但是当我输入数字时它没有正确计算....那个数字是(在哪个堆栈中),哪个是最顶层的数字堆栈,所以程序将减去它并获得它必须移动的数量的盒子。
希望你能帮我解决我做错了什么以及应该做些什么。
以下是我尝试的代码,但似乎无法正常工作:
import java.util.Scanner;
public class A1 {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int p = sc.nextInt();
int k = sc.nextInt();
int d = sc.nextInt();
int base = 1;
int size = p;
int topNum = p+(p+k);
int e=0;
int numBox = 0;
int movedBox=0;
int counter = 0;
while(e<d) {
numBox = sc.nextInt();
e++;
base=base+size;
size=size+k;
topNum=topNum+(size+k);
movedBox=topNum-numBox;
counter=movedBox+counter;
}
System.out.println(counter);
}
}
更新版本:
import java.util.Scanner;
public class SO {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int p = sc.nextInt();
int k = sc.nextInt();
int d = sc.nextInt();
int height = p;
int topNum = p;
int e=0;
int numBox = 0;
int movedBox=0;
int counter = 0;
while(e<d) {
numBox = sc.nextInt();
e++;
while(topNum<numBox) {
height=height+k;
topNum = topNum + height;
}
movedBox=topNum-numBox;
counter=movedBox+counter;
}
System.out.println(counter);
}
}