對 n 個同學的考試成績從大到小排名,成績相同的算同一名。求排名為 m 的成績读存。若無排名為m的成績,輸出最后一名的成績呕屎。
輸入格式
一共三行
第一行:一個整數(shù) n让簿,表示同學的個數(shù)。
第二行:n 個整數(shù)秀睛,表示 n 個同學的成績尔当。
第三行:一個整數(shù) m,表示排名蹂安。
? ? ?
輸出格式
一個整數(shù)椭迎,表示排名為 m 的成績。
數(shù)據(jù)范圍
1 <= n , m <= 1000
輸入樣例
6
100 100 99 98 97
2
輸出樣例
99
解釋
第一名成績:100
第二名成績:99
第三名成績:98
第四名成績:97
#include<stdio.h>
#define M 1000
void swap(int *a, int *b);
void gradesort(int g[], int n);
void delDul(int g[], int n);
int main() {
int n,m;
scanf("%d",&n);
int g[n] = {0};
for(int i = 0; i < n; i++) {
scanf("%d",&g[i]);
if(getchar()=='\n'){
break;
}
}
scanf("%d",&m);
gradesort(g, n);
delDul(g,? n);
printf("%d",g[m-1]);
return 0;
}
void gradesort(int g[], int n) {
// 冒泡排序
int flag = 0; // 看一下這一趟有沒有發(fā)生交換
for(int j = 0; j < n; j++) {
for(int i = j; i < n-1; i++) {
if(g[i]<g[i+1]) {
swap(&g[i],&g[i+1]);
flag = 1;
}
}
if(flag == 0) {
break;
}
}
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void delDul(int g[], int n) {
for(int i = 0; i < n-1; i++){
if(g[i]==g[i+1]){
for(int j = i; j < n; j++){
g[j] = g[j+1];
}
}
}
}