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