关于c++:PAT甲级1116-Come-on-Lets-C

题目粗心

给定一个长度为N的排名列表和长度为K的查问列表,须要你依照如下规定输入每一个查问的后果.

  • 1、排名第一的取得Mystery Award奖品
  • 2、排名为素数的取得Minion奖品
  • 3、所有其余加入较量的人均取得Chocolate奖品
  • 4、对于非法查问输入Are you kidding?
  • 5、对于反复查问输入Checked

算法思路

依照规定模仿即可,应用valid数组记录非法的输出,Rank记录每一个人的排名,checked数组记录曾经查问的记录,对于每一次查问,首先判断是否非法,如果非法再判断是否曾经查问过,如果没有,就依照1,2,3规定进行查问即可,最初得将checked[query]置为true

提交后果

AC代码

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>

using namespace std;

int valid[10000];
int checked[10000];
int Rank[10000];

bool isPrime(int x){
    if(n<=1) return false;
    int n = (int)sqrt(x*1.0);
    for(int i=2;i<=n;++i){
        if(x%i==0){
            return false;
        }
    }
    return true;
}

int main() {
    int n;
    scanf("%d",&n);
    vector<int> v(n);
    for(int i=0;i<n;++i){
        scanf("%d",&v[i]);
        valid[v[i]] = true;
        Rank[v[i]] = i+1;
    }
    int k;
    scanf("%d",&k);
    for(int i=0;i<k;++i){
        int query;
        scanf("%d",&query);
        if(!valid[query]){
            printf("%04d: Are you kidding?\n",query);
        }else{
            if(checked[query]){
                printf("%04d: Checked\n",query);
            }else if(query==v[0]){
                printf("%04d: Mystery Award\n",query);
            }else if(isPrime(Rank[query])){
                printf("%04d: Minion\n",query);
            }else{
                printf("%04d: Chocolate\n",query);
            }
            checked[query] = true;
        }
    }
    return 0;
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理