Description
MSTC里有好多有特长的人, 有些是力量型人才,有些是智力型人才,有些是敏捷型的。
现在告诉你 N 个人, 每个人的力量,智力,敏捷的值, 和每个人的编号。
题目要求你将 N 个部员 按照力量 从大到小 排序, 如果两个部员的力量相同, 则按照 智力 值从大到小排序, 如果
两个部员力量, 智力 都一样,则按照 敏捷从 小 到 大排序。 测试数据保证没有两个部员的 力量, 智力, 敏捷 全部相同。
Input
第一行 N :表示有 N 个同学。 ( 1 <= N <= 500 )
接下来 N 行,
第 i 行有 3 个值, ai, bi, ci a 代表 力量, b 代表智力, c 代表敏捷。 编号为 i
( i 是部员的编号, 1 <= i <= N )
Output
输出 N 行:
将排序后的部员编号输出。
每行一个编号
Sample Input
4
2 2 3
2 3 4
4 8 9
2 2 2
Sample Output
3
2
4
1
解题思路:
主要考察排序,当然可以自己写一个排序程序。但是这里我用于STL中的sort排序。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct MSTC
{
int a,b,c;
int id;
};
vector<MSTC> stu;
bool lessComp(const MSTC& r1,const MSTC& r2)
{
if(r1.a>r2.a) return true;
else if(r1.a==r2.a&&r1.b>r2.b) return true;
else if(r1.a==r2.a&&r1.b==r2.b&&r1.c<r2.c) return true;
else return false;
}
int main()
{
int N;
while(cin>>N)
{
for(int i=0;i<N;++i)
{
MSTC t;
cin>>t.a>>t.b>>t.c;
t.id = i+1;
stu.push_back(t);
}
sort(stu.begin(),stu.end(),lessComp);
for(int i=0;i<N;++i)
cout<<stu.at(i).id<<endl;
}
return 0;
}
最后欢迎大家访问我的个人网站: 1024s