私は問題を解決しようとしています #299 - Web サイト UVa Online ジャッジの列車交換。私が持っているコードは、独立したテストケースでうまく機能します。ただし、彼らが提供するサンプル入力を使用すると、プログラムはテスト ケースの 1 つを省略します。最後のテスト ケースはより具体的です。
これが私のコードです:
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.
私のコードは2番目の解決策まで出力され、その後何らかの理由で停止します。私はそれをデバッグして、何が起こっているのかを段階的に確認しようとしましたが、片頭痛のポイントに追い込まれました. どんな洞察も高く評価されます。
... より正確に言うと、配列に何も取り込まずに 2 番目の forループで 3 回目のループが停止します...なぜなのかわかりません!
私が見つけたもう1つのことは、この問題を解決するには、中間の場合のスワップの数が6であるため、ここではバブルソートは役に立たないということです.10以上のスワップを行うため、間違った出力が得られるため、これは別の問題ですただし、私が提示した元のものに。配列に 3 回目の値を代入するループで 3 回目に停止する理由はまだわかりません。入力は次のもので構成されます。最初の行はケースの数です。この行は列車の長さを入力します ex: 4 この行は貨車の数を入力します ex: 2 4 3 1 次の次の行は、構造が例と同じである次のテスト ケースに対応します。彼らはあなたに列車を手配し、列車を順番に並べるために行われたスワップの数を教えてくれるように頼みます.