60分跪求dalao帮助

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

ihan255 @ 2018-10-08 21:04:17

RT 代码:

#include<iostream>
using namespace std;
bool pd(int n)
{
    if(n==1) return 0;
    for(int i=2;i*i<=n;i++) if(n%i==0) return 0;
    return 1;
}
int main()
{
    int i,j,n;
    cin>>n;
    for(i=2;i<=n;i++)
        for(j=2;j<=n-i;j++)
            if(pd(i)&&pd(j)&&pd(n-i-j)) {cout<<i<<" "<<j<<" "<<n-i-j;return 0;}
    return 0;
}

by ihan255 @ 2018-10-08 21:05:04

WA了四个点


by duoluoluo @ 2018-10-08 21:23:48

你的第二个数字可能会大于第三个数字,这样就不能保证前两个数字是最小的,因为如果你把第二个和第三个数字的位置对调就是一个更优解。


by ihan255 @ 2018-10-08 21:25:51

@duoluoluo 谢谢大佬QWQ


by ihan255 @ 2018-10-08 21:29:35

@duoluoluo 还是错的呀,仍旧WA了4个点

#include<iostream>
using namespace std;
bool pd(int n)
{
    if(n==1) return 0;
    for(int i=2;i*i<=n;i++) if(n%i==0) return 0;
    return 1;
}
int main()
{
    int i,j,n;
    cin>>n;
    for(i=2;i<=n;i++)
        for(j=2;j<=n-i;j++)
            if(pd(i)&&pd(j)&&pd(n-i-j)) 
            {
            if(j<=n-i-j) cout<<i<<" "<<j<<" "<<n-i-j;
            else  cout<<i<<" "<<n-i-j<<" "<<j;
            return 0;
            }
    return 0;
}

by duoluoluo @ 2018-10-09 07:11:51

@wu55555 因为你会重复输出,比如i = 1,j = 2,k = 3(举个例子),你之后j循环到3,k循环到2的时候还会再重复输出。


by duoluoluo @ 2018-10-09 07:13:09

@wu55555 不对,我刚才看了一眼,发现它只输出一行


by duoluoluo @ 2018-10-09 07:15:06

@wu55555 我知道了,你没有判断0这个情况,因为你n - i - j可能会等于0。


by duoluoluo @ 2018-10-09 07:16:10

@wu55555 我刚才把你的代码改了一下真的可以了2333


by ihan255 @ 2018-10-10 21:48:14

哦哦哦~谢谢大佬,我已经AC了QWQ


by ihan255 @ 2018-10-10 21:48:28

@duoluoluo


| 下一页