input:
4
22 96 12 49
output:
2 4 1 3
我想要输出的是根据输入的学生等级。
然而,我现在所尝试的却是错误的。
int count=0;
Scanner sc =new Scanner(System.in);
System.out.println("enter a number");
int a =sc.nextInt();
long[] b=new long[a];
for (int i = 0; i < a; i++) {
b[i]=sc.nextLong();
}
Arrays.sort(b);
for (int j = a-1; j >= 0; j--) {
System.out.println(b[j]);
count++;
System.out.println(count);
}
答案 0 :(得分:0)
您必须维护原始索引才能以您希望的方式打印。 而不是创建整数数组,创建一个“包装”数组。因此,即使在排序之后,您也知道元素的原始索引,因此您可以将其排名放在正确的索引中。
Class Wrapper{
Int index;
Int value ;
}
Wrapper [] input;
For(int I=0; I< n ; I++){
Int value = scan next value;
Input[i] = new Wrapper (I,value);
}
sort input based on value; // ascending order
Int[] output;
For(int I=0; I < input.length; I++){
output[input[i].index] = i+1; // to start the rank from 1.
}
Print output array
答案 1 :(得分:0)
您可以从Java拥有的实用程序Arrays获取帮助!使用indexOf
,binarySearch
等从数组中查找给定元素的索引。
Scanner sc =new Scanner(System.in);
System.out.println("enter a number");
int a =sc.nextInt();
long[] b = new long[a];
for (int i = 0; i < a; i++) {
b[i]=sc.nextLong();
}
long[] tem = new long[a];
System.arraycopy(b, 0, tem, 0, a);
Arrays.sort(b);
for (int i = 0; i < a; i++) {
int res = java.util.Arrays.binarySearch(b, tem[i]);
System.out.print(res + 1 + " ");
}
该计划提供:
input:
4
22 96 12 49
output:
2 4 1 3
看,如果数组没有排序:
java.util.Arrays.asList(theArray).indexOf(value)
如果数组已排序,您可以使用二进制搜索来获得性能:
java.util.Arrays.binarySearch(theArray, value)