我正在尝试解决问题#299 - 在网站UVa在线评判中进行列车交换。我的代码适用于独立的测试用例。但是,当我使用他们提供的示例输入时,我的程序省略了一个测试用例,最后一个更具体:
这是我的代码:
import java.util.Scanner;
public class Tester {
void problem(){
Scanner imput = new Scanner(System.in);
int numT =imput.nextInt();
int numL, aux, swaps=0;
int [] train = new int [50];
for (int i =0; i<numT; i++) {
numL = imput.nextInt();
for (int m =0; m< numL; m++) {
train[m]=imput.nextInt();
}
for (int j=0; j<numL; j++) {
if (train[j]>train[j+1]) {
for (int k =j; k<numL-1;k++) {
aux = train[k];
train[k]=train[k+1];
train[k+1]=aux;
swaps++;
}
}
}
System.out.println("Optimal train swapping takes "+swaps+" swaps.");
swaps = 0;
}
}
}
示例输入:
3
3
1 3 2
4
4 3 2 1
2
2 1
示例输出:
Optimal train swapping takes 1 swaps.
Optimal train swapping takes 6 swaps.
Optimal train swapping takes 1 swaps.
我的代码打印到第二个解决方案,然后由于某种原因停止。我试图调试它并逐步检查发生了什么,但它让我陷入了偏头痛的境地。任何见解都受到高度赞赏。
... 更确切地说,它第二次停在第二次为循环而没有任何东西进入数组......我不知道为什么!
我发现的另一件事是,为了解决这个问题,中间情况下的交换次数是6,因此冒泡排序在这里不会有用,因为它会产生超过10个交换因此产生错误的输出,这是然而,与我提出的原始问题不同。我仍然没有弄清楚为什么它第三次绕循环停止,我第三次为数组赋值。 输入包括: 第一行是案件数量。 这条线进入火车的长度:4 这条线输入前车的数量:2 4 3 1 接下来的几行对应于以下测试用例,其结构与示例相同。 他们要求你安排火车,并告诉他们按顺序制作火车的数量。