UVa 482 - 置换阵列

时间:2015-06-01 19:39:28

标签: java algorithm

您好我正在尝试提交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();
   }

}

我测试了一些有限的输入,但我无法弄明白。

1 个答案:

答案 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());