// A1055 The World's Richest (25分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
题意:
排序+超时排序
learn && wrong;
1、string的比较
2、编译错误,是strcmp(a.id,b.id)没有加上 《 0
3、有一组数据,四个人数,但是符合要求的只有三个,所以就导致输出了四个,所以每次都要重新初始化,需要写一个初试函数
4、有一组数据超时了,每个年龄中财富在前100名以内的人全都存到另一个数组中,后面所有操作均在这个数组中进行,这个操作是的后面K次均不会超时
题意:
输入:
1、人数(10的5次)+查询次数(10的3次)
2、名字(不超过8位+年龄(0到200+资产(10的6次方,正负区间
3、最后是,M个人数,最小,最大,闭区间
输出:
要求输出年龄区间内的最富有,
case #x;
首先资产非递增,相同资产则年龄非递减,再相同则名字非递减
名字+年龄+资产
编程思想:
1、輸入结构体,名字,年龄,资产
2、如何摘除年龄区间里的人呢,遍历,相同则复制,或者说,可以以什么排序先吗,年龄,或者说资产排序,然后输出,都不可行,如果是年龄,你怎么确定第几个到第几个,资产也是啊
3、摘出来后排序,然后输出
*/
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
struct person {
char id[10]; //名字
int age;
int weight; //资产
}per[100010],per2[100010];
bool cmp(person a, person b) {
if (a.weight != b.weight) return a.weight > b.weight;
else if (a.age != b.age) return a.age < b.age;
else return strcmp(a.id,b.id) < 0;
}
bool init();
int main()
{
//————————————————————
int total_person, num_times; //查询人数,查询次数;
cin >> total_person >> num_times;
//————————————————————
for (int i = 0;i < total_person;++i) { //录入人数
cin >> per[i].id >> per[i].age >> per[i].weight;//(scanf!!!)没有引用
}
//————————————————————
int meigequjian_duoshaoren, amin, amax;//查询的人数,以及年龄区间
//————————————————————
int times = 1; //输出第几次
for (int j = 0; j < num_times;++j) {
int xiabiao = 0; //录入到另一个数组的下标(!!!)每次都要覆盖掉
cin >> meigequjian_duoshaoren >> amin >> amax;
for (int k = 0;k < total_person;++k) { //录入到另一个结构体数组 (!!!)这里出现了一堆0?所有上界都弄混了
if (per[k].age >= amin && per[k].age <= amax) {
per2[xiabiao++] = per[k];
}
}
//————————————————————
sort(per2, per2 + xiabiao,cmp); //排序輸出
cout << "Case #" << times++ << ":" << endl;
if (xiabiao != 0) {
for (int j = 0;j < meigequjian_duoshaoren;++j) { //输出要求
printf("%s %d %d\n", per2[j].id, per2[j].age, per2[j].weight); //(!!!)printf输出string用什么格式
}
}
else {
cout << "None" << endl;
}
}
return 0;
}
网友评论