萌新求助,为什么连结果都输出不了(是我的本本太lj了吗TAT

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

v1429 @ 2019-08-19 16:47:00

#include<iostream>
#include<cstring>
#include<cmath>

using namespace std;

int isprime(int x){
for(int i=1;i<=floor(sqrt(x)+0.5);i++){
    if(x%i==0){

        return 0;
    }
}return 1;}
int main(){
int a[20000]={};
int a1=0;
for(int i=6;i<=19996;i++){
    if(isprime(i))a[a1++]=i;
}
int num;
cin>>num;
for(int i=2;i<=a1;i++){
    for(int j=i;j<=a1;j++){
        for(int k=j;k<=a1;j++){
        if(a[i]+a[j]+a[k]==num){
            cout<<a[i]<<" "<<a[j]<<" "<<a[k]<<endl;
            return 0; 
        }   
        }
    }
}
}

by Magallan_forever @ 2019-08-19 16:51:09

a数组开到外面吧……


by sy_zmq_001 @ 2019-08-19 17:04:08

@v1429

第一,您计数用的a1++,这样这个数组有效数字从下标0开始。 第二,题目未说不能用重复的数,所以最后的三层循环都应改为从0开始


by sy_zmq_001 @ 2019-08-19 17:07:42

@v1429 第三

for(int i=2;i<=a1;i++){

for(int j=i;j<=a1;j++){

    for(int k=j;k<=a1;j++){
    //这层循环从j开始的,写错了。
    if(a[i]+a[j]+a[k]==num){

        cout<<a[i]<<" "<<a[j]<<" "<<a[k]<<endl;
        return 0; 
    }   
    }
}

}


by v1429 @ 2019-08-19 19:52:25

@sy_zmq_001 谢谢大大,已改正。然后我在本地的DEV C++上运行没有输出任何结果是什么情况?QAQ求救。


by sy_zmq_001 @ 2019-08-20 08:34:04

@v1429 你要不把你新改的代码再发一下


by v1429 @ 2019-08-20 12:30:29

@sy_zmq_001 新的代码经过调试,发现是这一段有问题。我试着让它输出范围内所有质数;输出了20000个零。(isprime是之前定义的函数,质数为一,否则为零)修改成第二段之后输出了乱码。

int a[20000];
int main(){
int a1=0;
for(int i=6;i<19999;i++)
if(isprime(i)){a[++a1]=i;
    cout<<a[a1]<<" ";}
    //从if开始改成第二段
 if(isprimt(i))a[++a1}=i;
 int t=sizeof(a);
 for(int k=0;k<=a;k++)
 cout<<a[a1]<<" ";

by sy_zmq_001 @ 2019-08-20 19:57:04

#include <iostream>
#include <cstdio>
using namespace std;
int n,sum;
bool a[20000];  
int vis[20000];     
int main(){     
scanf("%d",&n);     
a[1]=1;
a[2]=0;     
int k=1;        
for(int i=3;i<=20000;i++)             
{   for(int j=i-1;j>=2;j--)                         
    {   if(i%j==0) {a[i]=1;break;   }
    }   
}   
for(int i=1;i<=20000;i++)       
    if(a[i]==0) {   vis[k++]=i;sum++;}      
for(int i=1;i<=sum;i++)     
    for(int j=1;j<=sum;j++) 
        for(int k=1;k<=sum;k++) 
            if(vis[i]+vis[j]+vis[k]==n) 
            {   printf("%d %d %d",vis[i],vis[j],vis[k]);return 0;   
            }
return 0;

}


|