Tominysun

原题如下:
www.luogu.com.cn_problem_P1217.png
emm...应该是我道行太浅吧...
我采用的是排除偶数数位的回文数,前两数位的手动输出,只判断、构造3,5,7位的回文质数.
第一次提交:(9/9WA)
Snipaste_2020-02-17_22-14-16.png

#include <iostream>
using namespace std;
bool zhishu(int x){ //判断质数的函数
    if(x<2)return false;
    if(x==2)return true;
    for(int i=2;i*i<=x;i++){
        if(x%i==0)return false;
    }
    return true;
}
int main()
{
    int a,b,c[]={5,7,11},i,d1,d2,d3,d4,num;
    cin>>a>>b;
    for(i=0;i<2;i++)//一位、两位
    {
        if(c[i]>=a && c[i]<=b)
            cout<<c[i]<<"\n";
    }
    for(d1=1;d1<=9;d1+=2)//三位数     
        for(d2=0;d2<=9;d2++){
            num = 101*d1 + 10*d2;        
            if(num>=a && num<=b && zhishu(num))            
                cout<<num<<"\n";        
            else
            return 0;
    }
    for(d1=1;d1<=9;d1+=2)//五位数     
        for(d2=0;d2<=9;d2++)
            for(d3=0;d3<=9;d3++){
                num = 10001*d1 + 1010*d2 + 100*d3;
                if(num>=a && num<=b && zhishu(num))
                    cout<<num<<"\n";        
                else            
                    return 0;
    }
    for(d1=1;d1<=9;d1+=2)//七位数
        for(d2=0;d2<=9;d2++)
            for(d3=0;d3<=9;d3++)
                for(d4=0;d4<=9;d4++){
                    num = 1000001*d1 + 100010*d2 + 10100*d3 + 1000*d4;
                    if(num>=a && num<=b && zhishu(num))
                        cout<<num<<"\n";
                    else
                        return 0;
    }
    return 0;
}

第二次提交:(3/9AC)
Snipaste_2020-02-17_22-17-10.png

#include<iostream>
using namespace std;

bool zhishu(long long int x){ //判断质数的函数
    for(int i=2;i*i<=x;i++){
        if(x%i==0)return false;
    }
    return true;
}

int main()
{    
    long long int a,b,num;
    int c[]={5,7,11};
    int i,d1,d2,d3,d4;    
    cin>>a>>b;
    for(i=0;i<3;i++)//一位、两位
    {
        if(c[i]>=a && c[i]<=b)
            cout<<c[i]<<"\n";
    }
    for(d1=1;d1<=9;d1+=2)//三位数     
        for(d2=0;d2<=9;d2++){
            num = 101*d1 + 10*d2;        
            if(num>=a && num<=b){
                if(zhishu(num))cout<<num<<"\n";
            }
            else
                return 0;
    }
    for(d1=1;d1<=9;d1+=2)//五位数     
        for(d2=0;d2<=9;d2++)
            for(d3=0;d3<=9;d3++){
                num = 10001*d1 + 1010*d2 + 100*d3;
                if(num>=a && num<=b){
                    if(zhishu(num))cout<<num<<"\n";
                }
                else            
                    return 0;
    }
    for(d1=1;d1<=9;d1+=2)//七位数
        for(d2=0;d2<=9;d2++)
            for(d3=0;d3<=9;d3++)
                for(d4=0;d4<=9;d4++){
                    num = 1000001*d1 + 100010*d2 + 10100*d3 + 1000*d4;
                    if(num>=a && num<=b){
                        if(zhishu(num))cout<<num<<"\n";
                    }
                    else
                        return 0;
    }
    return 0;
}

第三次:(9/9AC)
Snipaste_2020-02-17_22-18-20.png

#include<iostream>
using namespace std;

bool zhishu(long long int x){ //判断质数的函数
    for(int i=2;i*i<=x;i++){
        if(x%i==0)return false;
    }
    return true;
}

int main()
{    
    long long int a,b,num;
    int c[]={5,7,11};
    int i,d1,d2,d3,d4;
    cin>>a>>b;
    for(i=0;i<3;i++)//一位、两位
    {
        if(c[i]>=a && c[i]<=b)
            cout<<c[i]<<"\n";
    }
    for(d1=1;d1<=9;d1+=2)//三位数     
        for(d2=0;d2<=9;d2++){
            num = 101*d1 + 10*d2;        
            if(num>=a)if(num<=b){
                if(zhishu(num))cout<<num<<"\n";
            }
            else
                return 0;
    }
    for(d1=1;d1<=9;d1+=2)//五位数     
        for(d2=0;d2<=9;d2++)
            for(d3=0;d3<=9;d3++){
                num = 10001*d1 + 1010*d2 + 100*d3;
                if(num>=a)if(num<=b){
                    if(zhishu(num))cout<<num<<"\n";
                }
                else            
                    return 0;
    }
    for(d1=1;d1<=9;d1+=2)//七位数
        for(d2=0;d2<=9;d2++)
            for(d3=0;d3<=9;d3++)
                for(d4=0;d4<=9;d4++){
                    num = 1000001*d1 + 100010*d2 + 10100*d3 + 1000*d4;
                    if(num>=a)if(num<=b){
                        if(zhishu(num))cout<<num<<"\n";
                    }
                    else
                        return 0;
    }
    return 0;
}

我发现仅仅是改变了if的条件数目,就造成了AC与WA的不同???

不同的判断方式结果
if(... && ... && ...){}全WA
if(...)if(...)if(...){}3AC
if(...)if(...){if(...)}全AC

不知为何?我仍在探索中.

添加新评论