知识点
排序
疑问
暂无
代码
第一题
//由于题中未说有多少个组测试用例,我们保险一些
#include "bits/stdc++.h"
using namespace std;
const int maxn = 110;
struct stu{
int num;
int score; //成绩为整数
}stus[maxn];
//输入的学生的数量
int n;
bool cmp(stu a,stu b){
if(a.score < b.score){
return true;
}else if(a.score == b.score && a.num < b.num){
return true;
}else{
return false;
}
}
void print(){
for(int i=0;i<n;i++){
printf("%d %d\n",stus[i].num,stus[i].score);
}
}
int main(){
while(~(scanf("%d",&n))){
for(int i=0;i<n;i++){
scanf("%d %d",&stus[i].num,&stus[i].score);
}
sort(stus,stus+n,cmp);
print();
}
return 0;
}
第二题
//题目中未提及有多少学生,使用vector吧,名字也没说多大,用string
//成绩没说是啥,使用doule
#include "bits/stdc++.h"
#include <vector>
#include <string>
using namespace std;
struct stu{
int id;
string name;
double score;
};
//学生数组
vector<stu> stus;
//学生数量
int n;
//排序方式
int flag;
bool dcmp(stu a,stu b){
if(a.score > b.score){
return true;
}else if(a.score == b.score && a.id < b.id){
return true;
}else{
return false;
}
}
bool icmp(stu a,stu b){
if(a.score < b.score){
return true;
}else if(a.score == b.score && a.id < b.id){
return true;
}else{
return false;
}
}
void print(){
for(int i=0;i<stus.size();i++){
cout<<stus[i].name<<" "<<stus[i].score<<endl;
}
}
int main(){
while((scanf("%d",&n))!=EOF){
scanf("%d",&flag);
//清空vector,很重要
stus.clear();
for(int i=0;i<n;i++){
stu a;
a.id = i;
cin>>a.name;
scanf("%lf",&a.score);
stus.push_back(a);
}
if(flag == 0){
sort(stus.begin(),stus.end(),dcmp);
}else if(flag == 1){
sort(stus.begin(),stus.end(),icmp);
}
print();
}
}
反思
- 使用
sort()
即可; - 注意成绩是整数。