每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。
样例输入
8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
样例输出
8 265
2 264
6 264
1 258
5 258
应该怎样写啊~~求指点。。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner rd=new Scanner(System.in);
int n=rd.nextInt();
int arr[][]=new int[n][3];
int array[]=new int[n];
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr[i].length;j++)
{
arr[i][j]=rd.nextInt();
}
}
for(int i=0;i<array.length;i++)
{
array[i]=arr[i][0]+arr[i][1]+arr[i][2];
System.out.println(array[i]);
}
我这样写对吗,不知怎样往下写了
------最佳解决方案--------------------
你先想清楚是要干什么吧
你现在的代码是把
array[0]存的是学号0同学的总分
array[1]存的是学号1同学的总分
...
这样是吧,
但是你这样存了,学号又存在哪?
一个简单点的思路是,先声明一个学员类
class Student{
int id;
int total;
}
声明一个学员数组Student[] studentArray,
然后按你的输入给数组的每一位赋值
比如就用这一段
Student[] studentArray = new Student[];
for(int i=0;i<array.length;i++) {
Student student = new Student();
student.id = i;
student.total = arr[i][0]+arr[i][1]+arr[i][2];
}
然后声明一个排序后的结果数组Student[] result;
从studentArray第j(0-->length)位开始取出来跟result的第i(0-->length)位开始比较
if(result第i位是null)
把studentArray[j]放入result[i]
else{
if(studentArray[j].total > result[i].total){
把result[i]以及后面所有元素向后移一位
把student[j]放在result[i]的位置上
}else if(studentArray[j].total < result[i].total){
student[j]跟result[i + 1]比较
}else{
总分相同的情况,比较方法跟比较总分一样,
studentArray[j].id < result[i].id则result[i]及后面的元素后移
studentArray[j].id < result[i].id则跟result[i + 1]比较
}
}
------其他解决方案--------------------
我也写不出 去看看冒泡排序,插入排序能不能完成
------其他解决方案--------------------