1440 [AA]重生之我是Zarc_______厉兵秣马

Background

作为统一次元最强决斗者,毁灭世界的头号BOSS的扎克,竟然被自己的分身神游矢用主角光环给抹杀了。心怀怨恨的扎克带着愤怒重生了,现在,他不仅仅准备打败上代务给他定下的命运,而且准备向帕尔多斯那样击败最强决斗者——法老王。但是,首先,他得从自己的卡组中找到最强的四张卡来作为他的最强王牌。

Description

每一张卡牌都有五大属性:星数,攻击力,防御力,效果强度,属性。
扎克的选择是通过寻找到评分最高的四张卡,评分标准:
总评 = 星数 + 攻击力10 + 防御力*10 + 效果强度 100000 + 属性对应的数字;
卡牌一共有七大属性和属性对应的强度:
wind 1
water 1
fire 2
land 1
light -1000
dark 10
god 10000000
不过,神(god)属性的卡牌扎克无法使用,星数超过12的卡牌属于ZZ假卡,也无法使用

Input

首先输入七行数据,加载卡牌的属性和对应的属性值
然后输入18,表示一共有十八张卡牌,接下来18行数据,每一行数据表示一张卡牌的属性
X001 13 1000 1000 10 dark
X002 4 2000 1000 10 dark
X003 0 3000 1000 10 dark
X004 7 4000 100 10 dark
X005 8 5000 100 10 dark
X006 7 3000 10 1 land
X007 12 100 100 1 land
X008 1 1011 100 1 land
X009 2 1002 10 1 fire
X010 3 1004 100 1 fire
X011 4 1005 100 1 fire
X012 5 1006 100 1 lind
X013 6 1007 100 2 wind
X014 7 1008 0 3 wind
X015 8 1009 0 1 wind
X016 1 1008 10 4 wind
X017 2 1022 100 1 wind
X018 1 1013 100 1 god
分别是 卡牌名称,星数,攻击力,防御力,效果强度,属性

Output

输出评分前五的卡牌名称,每个一行,最后空一行

map vector pair 关联容器, 迭代器,C++11的标准,看一下就可以做了,没坑

Provided Codes

ss.cpp

#include<iostream>
#include "source.h"
using namespace std;
void nature_complete(map<string, int> &nature);
void card_complete(vector<pair<string, int>>& card, map<string, int> &nature);
bool compare(pair<string,int> a, pair<string, int> b);
void print(vector<pair<string, int>> ::iterator begin, vector<pair<string, int>> ::iterator end);
int main()
{
    map<string, int> Nature;
    nature_complete(Nature);
    auto be = Nature.cbegin();
    vector<pair<string, int>> Card;
    card_complete(Card,Nature);
    sort(Card.begin(), Card.end(), compare);
    auto bbe = Card.begin();
    auto eend = Card.end();
    print(bbe, eend);
    getchar();
    getchar();
}

Submission

source.h

#include<iostream>
#include<map>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

void nature_complete(map<string, int> &nature) {
    for (int i = 0; i<7; i++) {
        string name;
        int value;
        cin >> name >> value;
        nature.insert(pair<string, int>(name, value));
    }
}

void card_complete(vector<pair<string, int>>& card, map<string, int> &nature) {
    int amount;
    cin >> amount;
    for (int i = 0; i < amount; i++) {
        string name, Nature;
        int star, attack, defense, power;
        cin >> name >> star >> attack >> defense >> power >> Nature;
        if (star <= 12 && Nature != "god") {
            int nat;
            map<string, int>::iterator key = nature.find(Nature);
            if (key != nature.end()) {
                nat = key->second;
            }
            int value = star + attack * 10 + defense * 10 + power * 100000 + nat;
            card.push_back(pair<string, int>(name, value));
        }
    }
}

bool compare(pair<string, int> a, pair<string, int> b) {
    return a.second > b.second;
}

void print(vector<pair<string, int>> ::iterator begin, vector<pair<string, int>> ::iterator end) {
    vector<pair<string, int>> ::iterator tempIterator;
    int i = 0;
    for (tempIterator = begin; tempIterator != end; ++tempIterator,++i) {
        cout << tempIterator->first << endl;
        if (i == 3)
            break;
    }
}

Standard Answer

source.h

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;
void nature_complete(map<string, int> &nature)
{
    int num = 0;
    string Na;
    int Data;
    while (num < 7)
    {
        cin >> Na >> Data;
        nature.insert({ Na,Data });
        num++;
    }
}

void card_complete(vector<pair<string, int>>& card, map<string, int> &nature)
{
    int num;
    cin >> num;
    for (int i = 0; i < num;)
    {
        i++;
        string std;
        int A; int B; int C; int D; string E; int sum = 0;
        int EE;
        cin >> std >> A >> B >> C >> D >> E;
        if (A >= 12 || E == "god")
            continue;
        EE = nature[E];
        sum += A + 10 * B + 10 * C + 100000 * D + EE;
        card.push_back(make_pair(std, sum));
        //cout << std << " " << sum << endl;
    }
}

bool compare(pair<string, int> a, pair<string, int> b)
{
    if (a.second > b.second)
        return true;
    else
        return false;
}

void print(vector<pair<string, int>> ::iterator begin, vector<pair<string, int>> ::iterator end)
{
    int i = 4;
    while (i>0)
    {
        cout << (*begin).first;
        cout << endl;
        begin++;
        i--;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值