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 嗯。初学者。。而且初中,甚至还不知道质数的英文是啥。。。不过还是谢谢教我这个方法!