当前位置: 代码迷 >> Eclipse >> 排序有关问题。
  详细解决方案

排序有关问题。

热度:25   发布时间:2016-04-23 02:03:26.0
排序问题。。
每个学生都有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]);
}

我这样写对吗,不知怎样往下写了
------最佳解决方案--------------------
引用:
每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。 
样例输入
8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
……

你先想清楚是要干什么吧
你现在的代码是把
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]比较   
    }
}
------其他解决方案--------------------
我也写不出  去看看冒泡排序,插入排序能不能完成
------其他解决方案--------------------
引用:
引用:
每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。 
样例输入
8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
  相关解决方案