星系局部战争(结构struct,sort排序)

猎户星系中某星区爆发局部战争,持久的战争使得战争机器被大量消耗,甚至一些100年前生产武器都被启封使用。Gand军前线新到一批武器,为N台重型机甲,每台机甲的信息为攻击力Atk(100<=Atk<=999)、防御力Def(100<=Def<=600)、已生产时间year(0<=year<=200)、编号Idx(1<=Idx<=N<=1000)。

前线指挥官需要根据机甲信息快速准备出战顺序,要求出战机甲以攻击力强大者优先出击,攻击力相同者以防御力强大者优先出击,防御力相同者以已生产时间较低者优先出击。请根据要求,输出前线新到机甲的参战次序。

输入格式:

第1行,一个正整数N,1<=N<=1000。(1~N为机甲编号)

第2行起输入N行,每行三个正整数,分别表示攻击力、防御力、已生产时间。

输出格式:

输出1行,按要求排序后的机甲编号。

输入样例:

5

566 160 50

160 320 106

700 500 2

700 160 123

700 160 115

输出样例:

3 5 4 1 2

#include<iostream>
#include<algorithm>
using namespace std;
struct jijia{//定义jijia数据类型,一个机甲所需提供的信息
    int Atk,//攻击力
    Def,//防御力
    year,//已生产时间
    Idx;//运抵前线时的编号
};
bool cmpAtk(jijia x,jijia y){//sort排序标准:按攻击力从大到小排序
    return x.Atk > y.Atk ;
}
bool cmpDef(jijia x,jijia y){//sort排序标准:按防御力从大到小排序
    return x.Def > y.Def ;
}
bool cmpyear(jijia x,jijia y){//sort排序标准:按已生产时间从小到大排序
    return x.year < y.year ;
}
int N;
jijia a[1001];
int main(){
    cin>>N;
    for(int i=0;i<N;i++){
        cin>>a[i].Atk>>a[i].Def>>a[i].year;
        a[i].Idx = i+1;//编号从1开始
    }
    sort(a,a+N,cmpyear);//先按已生产时间排序
    sort(a,a+N,cmpDef);//再按防御力排序
    sort(a,a+N,cmpAtk);//最后才按攻击力排序
    for(int i=0;i<N;i++){
        cout<<a[i].Idx<<" ";
    }
    return 0;
}

解析:

      由于一个机甲个体有四个标签:编号、攻击力、防御力、已生产时间。使用结构(struct)自定义数据类型会有利于整体排序。

      由于“以攻击力强大者优先出击,攻击力相同者以防御力强大者优先出击,防御力相同者以已生产时间较低者优先出击”,从中最高优先级应该是已生产时间,然后是防御力,最后是攻击力。所以排序的优先级就为:已生产时间==》防御力==》攻击力。

      sort函数是C++的<algorithm>库提供的排序函数,其第三项可以通过自定义来设置排序参考对象和排序方式,当然也可以使用其它的排序方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值