Msaikoto @ 2018-07-25 15:15:49
想用广搜暴力枚举但是怎么就炸了,dalao们能不能帮我看看代码哪里错了 QAQ (献上膝盖)
#include<iostream>
#include<cmath>
using namespace std;
int n,sum;
int p;
int num[99999];
//素数判断
int ss(int j)
{
for(int i=2;i<=sqrt(j);i++){
if(!(j%i)){
return 0;
//break;
}
}
return 1;
}
int main()
{
cin>>n;
int head=0,tail=1,len=1;
//企图广搜一下,但是炸了。
int h[99999][4];
h[1][0]=2; //存当前的总和
h[1][1]=len; //存当前长度
h[1][2]=0; //存前一个数的位置
h[1][3]=2; //存 当前的数
//初始化
//num[1]=2;
do
{
head++;
for(int i=2;i<n;i++){ //从2 开始枚举
if(h[tail][0]<n&&h[tail][1]<3){ //判断当前长度是否为 3 同时当前总和 是否为n
if(ss(i)){
tail++;
//num[tail]=i;
h[tail][0]=i+h[head][0];
h[tail][1]=h[head][1]++; //存数
h[tail][2]=head;
h[tail][3]=i;
if(h[tail][1]==3&&h[tail][0]==n){ //判断加上一个数后是否长度为 3 总和 是否等于n
p=tail; //存下当前坐标
break; //结束枚举
}
}
}
}
if(p) break;
}while(head<tail);
int x,y,z;
//z=num[p];
//y=num[h[p][2]];
//x=num[h[h[p][2]][2]];
z=h[p][3];
y=h[h[p][2]][3]; //输出
x=h[h[h[p][2]][2]][3];
cout<<x<<" "<<y<<" "<<z;
return 0;
}