模拟题,复习了结构体排序
简化输出的地方,直接进行判断不排序
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct stu{
char name[10];
int age, money;
};
stu people[110000];
int n, k, m, start, en;
bool cmp1(stu a, stu b){
if(a.money != b.money)
return a.money > b.money;
else if(a.age != b.age)
return a.age < b.age;
else return (strcmp(a.name,b.name) <0);
}
bool cmp2(stu a, stu b){
return a.age < b.age;
}
int main(){
scanf("%d%d",&n,&k);
for(int i=0; i<n; i++){
scanf("%s%d %d",&people[i].name,&people[i].age,&people[i].money);
}
sort(people,people+n,cmp1);
for(int i=0; i<k; i++){
scanf("%d%d%d",&m,&start,&en);
printf("Case #%d:\n",i+1);
int k = 0, l = 1;
int sum = 0;
for(; k<n; k++){
if(people[k].age >= start && people[k].age <= en){
printf("%s %d %d\n",people[k].name,people[k].age,people[k].money);
sum = sum + 1;
}
if(sum == m) break;
}
if(sum == 0 ) printf("None\n");
}
return 0;
}
难道sort不可以 sort(arr+a,arr+b)只排序 a到b?
本来想着先把年龄找出来然后只排序符合要求的年龄就行了
结果是没有排序成功↓
int a, b;
bool key = true;
for(int j=0; j<n; j++){
if(people[j].age >= start && key) {
a = j;
key = false;
}
if(people[j].age >= end){
b = j;
break;
}
}
sort(people+a,people+b,cmp1);
/*for(int k=a; k<b; k++)
cout << people[k].name << " " << people[k].age << " " << people[k].money << endl;*/
int k = a, l = 1;
printf("Case #%d:\n",i+1);
for(; k<=b&&l<=m; k++,l++ ){
printf("%s %d %d\n",people[k].name,people[k].age,people[k].money);
}
可以这么排序,鼠标没电了,,明天再尝试一下吧