NOI / 1.10编程基础之简单排序 01:谁考了第k名

01:谁考了第k名

  • 查看
  • 提交
  • 统计
  • 提问

总时间限制: 

1000ms

内存限制: 

65536kB

描述

在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。

输入

第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。
其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。

输出

输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)

样例输入

5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9

样例输出

90788004 68.4

方法一:借助一个新的实型一维数组先排序,找到那个位于n位大小的数。再在原数组进行搜索,找到起始的位置n。再打印位于k位置的学号和成绩。 

#include
int main()
{
	int m,n;
	scanf("%d%d",&m,&n);
	int s[100];
	double a[100],b[100];
	int i,j;
	for(i=0;ia[j]){
				max=a[i];
				a[i]=a[j];
				a[j]=max;
			}
		}
	}
	int k=0;
	for(i=0;i

 

方法二: 直接设一个实型二维数组,进行输入输出。将这个二维数组根据成绩进行排序,最后输出位于n位置的学号和成绩。注意将列位置都要互换排序,仔细防止出错。

#include
int main()
{
	int m,n;
	scanf("%d%d",&m,&n);
	double a[100][100];
	int i,j,k;
	for(i=0;ia[i][1]){
				c[0][0]=a[k][0];
				a[k][0]=a[i][0];
				a[i][0]=c[0][0];
					
				c[0][1]=a[k][1];
				a[k][1]=a[i][1];
				a[i][1]=c[0][1];
					
				max=a[i][1];
			}
		}
	}
	printf("%.lf %g",a[n-1][0],a[n-1][1]);
	return 0;
 } 

这里排序利用冒泡法的方式。

你可能感兴趣的:(c语言,矩阵,线性代数)