pat 甲级 数学

A1152

#include<iostream>
using namespace std;

string s;

int n,k;

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

int main()
{
    
    
    cin >> n >> k >> s;
    bool flag=false;
    string first;
    for(int i=0; i+k<=s.size(); i++)
    {
    
    
        string temp1=s.substr(i,k);
        int temp2=stoi(temp1);
        if(isPrime(temp2))
        {
    
    
            first=temp1;
            flag=true;
            break;
        }
    }
    if(flag==true)
        cout << first;
    else
        cout << 404;
    return 0;
}

A1116

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

const int maxn=10010;

int n,k;

map<int,int> s;

unordered_set<int> s1;

bool isPrime(int x)
{
    
    

    for(int i=2; i*i<=x; i++)        //注意素数的比较i*i<=x
    {
    
    
        if(x%i==0)
            return false;
    }
    return true;
}

int main()
{
    
    
    cin >> n;
    int temp1;
    for(int i=1; i<=n; i++)
    {
    
    
        cin >> temp1;
        s[temp1]=i;
        s1.insert(temp1);
    }
    bool inq[maxn]={
    
    false};
    cin >> k;
    int temp2;
    for(int i=0; i<k; i++)
    {
    
    
        cin >> temp2;
        if(s1.count(temp2)==0)         
        {
    
    
            printf("%04d: Are you kidding?\n",temp2);
        }
        else
        {
    
    
            if(inq[temp2]==false)
            {
    
    
                if(s[temp2]==1 || s[temp2]==0)        //如果排名是对应的0或者1,则输出Mystery Award
                    printf("%04d: Mystery Award\n",temp2);
                else if(isPrime(s[temp2]))            //如果排名是素数则输出Minion
                    printf("%04d: Minion\n",temp2);
                else                                     //如果排名是合数则输出Chocolate
                    printf("%04d: Chocolate\n",temp2);
                inq[temp2]=true;
            }
            else
            {
    
    
                printf("%04d: Checked\n",temp2);
            }
        }
    }
    return 0;
}

A1112

#include<iostream>
using namespace std;

const int maxn=200;

int k;
string s;

int st[maxn];

int main()
{
    
    
    cin >> k >> s;

    //对字符串先进行标记,如果是有问题的字符就标记为0,否则为1
    for(int i=0; i<s.size(); i++)
    {
    
    
        int j=i+1;
        while(j<s.size() && s[i]==s[j])
        {
    
    
            j++;
        }
        int len=j-i;
        if(len%k)       //只对没有问题的进行标记,剩下的自然是又问题的
        {
    
    
            st[s[i]]=1;
        }
        i=j-1;    //当前这个j是一段相同的字符串中的最后一个,由于后面有i++,所以让i的值为j-1,则结合后面的i++,则i就是从一段相同的字符串中的下一个位置开始
    }

    string res;
    for(int i=0; i<s.size(); i++)
    {
    
    
        if(!st[s[i]])
        {
    
    
            cout << s[i];
            st[s[i]]=2;   //有问题的是0,没有问题的是1,将又问题的输出后,直接改为2,则下一次不用输出
        }

        if(st[s[i]]==1)     //注意此时st数组中只有  没有问题的字符1 以及 又问题的字符已经输出的字符 2
        {
    
    
            res+=s[i];
        }
        else          //这个就表示st[]的值为2就是又问题的,
        {
    
    
            res+=s[i];
            i+=k-1;        //此if-else语句中,已经把又问题中的一个字符放到res中了,所以i必须跳到下一个没有问题的字符位置,由于后面有i++,所以必须是i+=k-1

        }
    }
    cout << endl << res << endl;
}

A1104

#include<iostream>
using namespace std;

const int maxn=101111;

int n;

long double all=0;       //注意这里的double要改为long double

int main()
{
    
    
    cin >> n;
    double temp;
    for(int i=1; i<=n; i++)
    {
    
    
        cin >> temp;
        all+=temp*i*(n-i+1);
    }
    printf("%.2Lf",all);         //在printf输出时,要改为%.Lf
    return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wsfhdhjs/article/details/109954294