Yibentong 1178: Classement des résultats (papa)

1178: Classement des résultats


Limite de temps: 1000 ms Limite de mémoire: 65536 Ko
Commits: 18913 Passes: 7545

【Description du titre】

Étant donné le relevé de notes d'un cours dans la classe, veuillez trier et produire le relevé de notes en fonction de la note de haut en bas. S'il y a les mêmes notes, le nom est en premier dans l'ordre.

【Entrez】

La première ligne est n (0 <n <20), indiquant le nombre d'élèves dans la classe;

Dans les n lignes suivantes, chaque ligne est le nom de chaque élève et ses notes, séparées par un seul espace. Le nom ne contient que des lettres et la longueur ne dépasse pas 20, et le score est un entier non négatif ne dépassant pas 100.

【Sortie】

Triez les transcriptions de haut en bas et sortez-les. Chaque ligne contient le nom et la partition, avec un espace entre elles.

【Exemple d'entrée】

4 
Kitty 80 
Hanmeimei 90 
Joey 92 
Tim 28

[Exemple de sortie]

Joey 92 
Hanmeimei 90 
Kitty 80 
Tim 28

Expliquez dans le code.

#include<bits/stdc++.h>
using namespace std;
struct student{
	string name;
	int score;
};
student a[25];
int n;
bool cmp(student x,student y){
// 复杂的cmp写法 
/*
	if(x.score>y.score){
		return true;
	}else if(x.score==y.score){
		if(x.name<y.name)
			return true;
		else 
			return false;
	}else{
		return false;
	}
*/
// 简单的cmp 
	if (x.score != y.score) {
		return x.score > y.score;
	}
	return x.name < y.name;
}
int main(){
  	freopen("test.in","r",stdin);
  	freopen("test.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].name>>a[i].score;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n-i;j++){
			if( !cmp(a[j],a[j+1]) ){ // 这里记得是 !  
				swap(a[j],a[j+1]);    // swap真强大 
			}			
		}
	}	
	for(int i=1;i<=n;i++){
		cout<<a[i].name<<" "<<a[i].score<<"\n";
	}
	return 0;
}
/*
测试数据要记得试试字典序排序有无错,如: 

4
Kitty 80
BC 90
ABC 90
Tim 28 
*/ 

 

Posté 33 articles originaux · aimé 0 · visites 167

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42790071/article/details/105464537
conseillé
Classement