首页 > ACM题库 > 九度OJ > 九度-1196-成绩排序[解题代码]
2013
12-13

九度-1196-成绩排序[解题代码]

题目来源:2009年华中科技大学计算机研究生机试真题

题目描述:

用一维数组存储学号和成绩,然后,按成绩排序输出。

输入:

输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。

输出:

按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。

样例输入:
3
1 90
2 87
3 92
样例输出:
2 87
1 90
3 92

cpp 代码如下:
#include<stdio.h>

int main(int argc, char *argv[])
{
    int n ;
    
    while(scanf("%d",&n) != EOF ){
         int *p = new int[n];
         int *q = new int[n];
         for(int i=0; i<n; i++){
                 scanf("%d %d",&p[i],&q[i]);   
                 //cin>>p[i]>>q[i];      
         }
         
         
         for(int i=n; i>0; i--){
                 int flag = 1;
				for(int j=0; j<i-1; j++){
					if(p[j] > p[j+1]){
                            flag = 0;
						int temp = p[j];
					p[j] = p[j+1];
						p[j+1] = temp;						
						temp = q[j];
						q[j] = q[j+1];
						q[j+1] = temp;
					}
				}
				if(flag)
				        break;			}
        for(int i=n; i>0; i--){
                int flag = 1;
				for(int j=0; j<i-1; j++){
					if(q[j] > q[j+1]){
                            flag = 0;
						int temp = q[j];
						q[j] = q[j+1];
						q[j+1] = temp;	
						temp = p[j];
						p[j] = p[j+1];
						p[j+1] = temp;
					}
				}
				if(flag)
				break;
			}	
			for(int i=0; i<n; i++){
					printf("%d %d\n", p[i], q[i]);

			}
    }
    
    return 0;
}


/**************************************************************
	Problem: 1196
	User: coder
	Language: C++
	Result: Accepted
	Time:50 ms
	Memory:1412 kb
****************************************************************/


  1. 学算法中的数据结构学到一定程度会乐此不疲的,比如其中的2-3树,类似的红黑树,我甚至可以自己写个逻辑文件系统结构来。