2018沈阳网络赛K

容易想到不存在超过三位的数满足条件,打表找出所有三位及以下的数。

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

bool IP(int x)
{
    //bool flag=1;
    for(int i=2;i<=sqrt(x);i++)
    {
        if(x%i==0)
        {return 0;}
        
    }
    return 1;
}

inline bool check(int x)
{
    int d[10];
    int a[10];
    if(0<x&&x<10)
    {
        if(x!=2&&x!=3&&x!=5&&x!=7&&x!=1)
        return 0;
        else
        return 1;
    }
    if(10<=x&&x<100)
    {
        if((x%10)!=2&&(x%10)!=3&&(x%10)!=5&&(x%10)!=7&&(x%10)!=1)
        return 0;
        if(((x/10))!=2&&((x/10))!=3&&((x/10))!=5&&((x/10))!=7&&((x/10))!=1)
        return 0;
        if(!IP(x))
        return 0;
        return 1;
    }
    if(100<=x&&x<1000)
    {
        d[1]=x%10;
        d[2]=(x/10)%10;
        d[3]=(x/100)%10;
        //cout<<"asdf"<<endl;
        if((d[3])!=2&&(d[3])!=3&&(d[3])!=5&&(d[3])!=7&&(d[3])!=1)
        return 0;
        //cout<<"asdf"<<endl;
        if((d[2])!=2&&(d[2])!=3&&(d[2])!=5&&(d[2])!=7&&(d[2])!=1)
        return 0;
    //    cout<<"asdf"<<endl;
        if((d[1])!=2&&(d[1])!=3&&(d[1])!=5&&(d[1])!=7&&(d[1])!=1)
        return 0;
        //cout<<"asdf"<<endl;
        a[1]=d[3]*10+d[2];
        a[2]=d[3]*10+d[1];
        a[3]=d[2]*10+d[1];
        //cout<<a[1]<<a[2]<<a[3]<<endl;
        if(IP(a[1])==0||IP(a[3])==0||IP(a[2])==0||IP(x)==0)
        return 0;
        return 1;
    }
}

int main()
{
    //check(731);
    //system("pause");
    int a[100];
    char s[1000];
    int t,_,ans;
    int cnt=0;
    int CA=0;
    for(int i=1;i<=999;i++)
    {
        if(check(i))
        {
            //cout<<i<<endl;
            a[++cnt]=i;
        }
    }
    int T,l,i;
    scanf("%d%*c",&T);
    while(T--)
    {
        scanf("%s%*c",s);
        //CA++;
        printf("Case #%d: ",++CA);
        l=strlen(s);
        if(l>3)
        {
            printf("317\n");
            continue;
        }
        else
        {
            t=0;
            _=1;
            for(i=l-1;i>=0;i--)
            {
                t+=(s[i]-'0')*_;
                _*=10;
            }
            //cout<<t<<endl;
            ans=1;
            i=1;
            if(t>=317)
            {
                printf("317\n");
                continue;
            }
            while(i<=cnt&&a[i]<=t)
            {
                ans=a[i];
                i++;
            }
            printf("%d\n",ans);
        }
    }
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/LMissher/p/9610842.html