蒟蒻求助

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

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;
}

|