C++为啥全WA。。。

P1579 哥德巴赫猜想(升级版)

Xiao_Xian @ 2018-10-08 22:05:52

我在自己电脑上调试,错了之后下了一组数据看看,没发现问题,但上传上去就是全WA,为啥。。

#include<bits/stdc++.h>
using namespace std;
bool chi(int n)
{
if(n==1) return false;
for(int i=2;i*i<=n;i++)
if(n%i==0)
{
return false;}
return true;
}
int main()
{
    int n,a,b,c,ki,ko,kp,p;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        ki=0;
        if(i!=1)
        {
            if(chi(i)==true) ki=i;
        }
        if(ki!=0)
        for(int o=1;o<=n-i;o++)
        {
            ko=0;
            if(chi(o)==true) ko=o;
            else ko=0;

            if(ko!=0)
            {
                p=n-i-o;
                kp=0;
                if(chi(p)==true)
                {
                    kp=p;
                    break;
                }
        }
            }
            if(kp!=0) break;}
        if(ki!=0&&ko!=0&&kp!=0){
        printf("%d %d %d",ki,ko,kp);}
    return 0;
}

by Cola @ 2018-10-08 22:12:59

我没认真看,但我忍不住问一下,初始化了吗


by Cola @ 2018-10-08 22:13:16

@Xiao_Xian


by Cola @ 2018-10-08 22:19:25

你写代码习惯好差,排版...
判断质数可以更快一点的(非筛法):

bool isPrime(int n)//prime是质数的意思
{
    if((n == 1) || (n % 2 == 0)) return false;
    if(n == 2) return true;
    for(int i = 3;i * i <= n;i++) if(n % i == 0) return false;
    return true;
}

by Cola @ 2018-10-08 22:21:01

楼上代码有点小问题,重写:

bool isPrime(int n)//prime是质数的意思
{
    if((n == 1) || (n % 2 == 0)) return false;
    if(n == 2) return true;
    for(int i = 3;i * i <= n;i +=2) if(n % i == 0) return false;//问题出在"i++",应该是"i += 2"
    return true;
}

by LPA20020220 @ 2018-10-08 22:35:02

qwq


by LPA20020220 @ 2018-10-08 22:35:29

大家刚入门的时候大概都是这种码风吧...


by Xiao_Xian @ 2018-10-09 19:48:23

@LPA20020220 确实刚入门哈哈!


by Xiao_Xian @ 2018-10-09 19:51:46

@Cola 有检查了一下。没发现需要初始化而没初始化的情况。。


by Xiao_Xian @ 2018-10-09 19:53:10

@Cola 嗯。初学者。。而且初中,甚至还不知道质数的英文是啥。。。不过还是谢谢教我这个方法!


|