PTA | 1059 C语言竞赛 分数 20

202 阅读3分钟

PTA | 程序设计类实验辅助教学平台 (pintia.cn)

第一种方式:做标记 59_哔哩哔哩_bilibili

#include<iostream>
#include<map>
#include<cmath>
using namespace std;

bool isprime(int x)
{
    if(x<2)return 0;
    for(int i=2;i*i<=x;i++)
    {
        if(x%i==0)return false;
    }
return true;
}
int a[10005];
int x;
int main() {
       int n;cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>x,a[x]=i;
    }
    
    int k;cin>>k;
    for(int i=0;i<k;i++)
    {
       cin>>x;
        if(a[x]==1)printf("%04d: Mystery Award\n",x),a[x]=-1;
        else if(isprime(a[x])&&a[x]>0)printf("%04d: Minion\n",x),a[x]=-1;
        else if(a[x]==0)printf("%04d: Are you kidding?\n",x);
        else if(a[x]>0)printf("%04d: Chocolate\n",x),a[x]=-1;
        else if(a[x]==-1)printf("%04d: Checked\n",x);
       
    }
    return 0;
}

image.png

第二种

#include<bits/stdc++.h>
using namespace std;
const int  N=1e5+10;
int m[N],check[N];


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

int main()
{
    int n=0;cin>>n;
    for(int i=1;i<=n;++i)
    {
        int x;cin>>x;
        m[x]=i;
    }

    int k=0;cin>>k;
    for(int i=0;i<k;++i)
    {
        int num=0;cin>>num;
        if(m[num])  //如果可以查得到
        {
            
            //刚开始是默认为0的情况,即之前没有出现过   后面出现过之后就打印多吃多占
            if(check[num]) printf("%04d: Checked\n", num); 
          
           //否则就是之前没有出现过的情况
           else if(m[num]==1)  //是冠军就打印  神秘大奖
            printf("%04d: Mystery Award\n",num);
            
            else if(isprime(m[num]))  //如果是素数就输出小黄人
                 printf("%04d: Minion\n",num);
            
            else  printf("%04d: Chocolate\n",num);  //不是素数也不是冠军就是  巧克力
       
        
          check[num]=1;  //走过的做一个标记
        }
        else  //查不到就输出玩我呢?
             printf("%04d: Are you kidding?\n",num);
    }
    return 0;
}

image.png

第二种思想

利用isprime()函数的返回值:

#include<iostream>
#include<map>
#include<cmath>
using namespace std;

int isprime(int x) {
    if (x < 2) return -1;
    for (int i = 2; i * i <= x; i++) {
        if (x % i == 0) return 2;
    }
    return 1;
}

int main() {
    int n;
    cin >> n;
    int a[10005];
    map<int, int> mp;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        mp[a[i]] = isprime(i + 1);
    }
    int k;
    cin >> k;
    for (int i = 0; i < k; i++) {
        int temp;
        cin >> temp;
        pair<int, int> it = { temp,mp[temp] };
        if (it.second == 0) {  //
            printf("%04d: Are you kidding?\n", it.first);
        }
        else if (it.second == 4) {  //=4就是已经领过奖项了
            printf("%04d: Checked\n", it.first);
        }
        else if (it.second == -1) {  //-1就是不是素数的意思
            printf("%04d: Mystery Award\n", it.first);
            mp[temp] = 4;  //标记一下
        }
        else if (it.second == 1) {  //返回1就是素数

            printf("%04d: Minion\n", it.first);
            mp[temp] = 4;  //标记一下
        }
        else {
            printf("%04d: Chocolate\n", it.first);
            mp[temp] = 4;  //标记一下
        }
    }
    return 0;
}

image.png

夭折版

#include<iostream>
#include<map>
#include<cmath>
using namespace std;
struct Sort 
{
    int index;
    int  count;
};
bool isprime(int x) {
    if (x < 2) return false;
    for (int i = 2; i * i <= x; i++) {
        if (x % i == 0) return false;
    }
    return true;
}

int main() {
    int n;
    cin >> n;
    int a[1005];
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    int k;
    cin >> k;
    map<int,Sort> mp;

    for (int i = 0; i < k; i++) {
        int temp;
        cin >> temp;
        for(int j=0;j<n;j++)
        {
            if(a[j]==temp)
            {
                mp[temp].count++;
                mp[temp].index=j;
            }
        }

    }

    for (auto& it : mp) {
        if (it.second.count == 0) {
            printf("%04d: Are you kidding?\n", it.first);
        } else if (it.second.count > 1) {
            printf("%04d: Checked\n", it.first);
        } else if (it.second.index == 0) {
            printf("%04d: Mystery Award\n", it.first);
        } else if (isprime(it.second.index)) {
            printf("%04d: Minion\n", it.first);
        } else {
            printf("%04d: Chocolate\n", it.first);
        }
    }

    return 0;
}