您好我正在尝试提交UVa 482问题here:
在许多计算机问题中,有必要置换数据阵列。 也就是说,数组中的数据必须在某些指定的位置重新排列 订购。置换任意数据数组的一种方法是指定 使用索引数组的排列来指出该位置 新数组中的元素。设x是要置换的数组 让x'成为置换数组。然后,我们有关系 在x和x'之间,x'pi = xi。
输入
输入以一行上的单个正整数开头 表示以下案例的数量,每个案例为 如下面所描述的。这一行后跟一个空白行,并且有 两个连续输入之间也是一个空行。每个输入集都会 包含两行数字。第一行是索引数组p 包含整数1 ... n,其中n是整数的数量 列表。第一行中的数字将被置换 一些时尚。第二行将包含浮动的列表编号 点格式。
输出
对于每个测试用例,输出必须遵循以下描述。该 两个连续案例的输出将用空行分隔。 该程序的输出将是浮点数列表 来自输入集,根据排列数组排序 输入文件。必须在每行打印一个输出数字 它们各自出现在输入文件中的格式相同。
示例输入
1
3 1 2
32.0 54.7 -2示例输出
54.7
-2
32.0
但判决结果是错误的答案,问题本身并不复杂,但我真的卡住了!!!
这是我的代码:
import java.util.*;
class Main {
public static void main(String args[]) {
Main problem = new Main();
problem.solve();
}
void solve() {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int counter = 0;
while (counter != n) {
ArrayList<Integer> index = new ArrayList<>();
ArrayList<String> number = new ArrayList<>();
while (in.hasNextInt())
index.add(in.nextInt());
for (int i = 0; i < index.size(); i++)
number.add(in.next());
String sortedNumber[] = new String[index.size()];
for (int i = 0; i < index.size(); i++)
sortedNumber[index.get(i) - 1] = number.get(i);
for (int i = 0; i < index.size(); i++)
System.out.println(sortedNumber[i]);
if (counter < n - 1)
System.out.println();
counter++;
}
in.close();
}
}
我测试了一些有限的输入,但我无法弄明白。
答案 0 :(得分:1)
您假设没有浮点数也是整数。如果是,你的程序会做一些奇怪的事情。
尝试此输入:
2
1 2 3
0 2.0 3.0
1 2 3
1.1 2.2 3.3
你应该逐行读取排列:
String line = in.nextLine();
for (String s : line.split(" ")) {
index.add(Integer.parseInt(s));
}
而不是
// fails when there's starting ints in the "floating-point" line
while (in.hasNextInt()) index.add(in.nextInt());