PAT(Advanced) 1116 Come on! Let‘s C C++实现

PAT(Advanced) 1116 Come on! Let’s C C++实现

题目链接

1116 Come on! Let’s C

题目大意

给定ID和排名,考虑四种情况:排名第一、排名为质数、排名非质数且非第一、没有进入排名,根据这四种情况对查询进行输出,若对同一ID查询超过一次则输出已查询。

算法思路

借助C++ STL容器unordered_map存放ID和排名映射,容器unordered_set存放已经查询的ID

AC代码

/*
author : eclipse
email  : eclipsecs@qq.com
time   : Wed Feb 03 10:29:05 2021
*/
#include <bits/stdc++.h>
using namespace std;

bool prime(int number) {
    for (int i = 2; i <= sqrt(number); i++) {
        if (number % i == 0) {
            return false;
        }
    }
    return true;
}

int main(int argc, char const *argv[]) {
    int N, K;
    scanf("%d", &N);
    unordered_map<int, int> rank;
    for (int i = 0; i < N; i++) {
        int ID;
        scanf("%d", &ID);
        rank[ID] = i + 1;
    }

    unordered_set<int> checked;
    scanf("%d", &K);
    for (int i = 0; i < K; i++) {
        int ID;
        scanf("%d", &ID);
        if (!checked.count(ID)) {
            if (rank.count(ID)) {
                if (rank[ID] == 1) {
                    printf("%04d: Mystery Award\n", ID);
                } else {
                    printf("%04d: %s\n", ID, prime(rank[ID]) ? "Minion" : "Chocolate");
                } 
                checked.insert(ID);
            } else {
                printf("%04d: Are you kidding?\n", ID);
            }
            
        } else {
            printf("%04d: Checked\n", ID);
        }
    }
    return 0;
}

样例输入

6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222

样例输出

8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?

鸣谢

PAT

最后

  • 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值