求助,两种解法为什么前一个对后一个不对
查看原帖
求助,两种解法为什么前一个对后一个不对
528989
Gravitas楼主2021/6/16 17:43

第一个是双WA代码(为了验证它是错的我又多了一次Notpass)

#include<iostream>
#include<cmath>
using namespace std;
bool isprime(long n)
{
    if(n == 2) return true;
    else
    {
        for(int i = 2;i <= sqrt(n) + 1;i++)
        {
            if(n % i == 0) return false;
        }
    }
    return true;
}
int main()
{
    int N , sum, num=0, p,a[10000];
    int j = 2;
    cin>>N;
    for(;j <= 2*N/3;j++)
    {
        if(isprime(j))
        {
            sum += j;
            num ++;
            a[num] = j;
        }
        if(sum > N) break;
    }
    for(int k = 1;k < num;k++) cout<<a[k]<<endl;
    cout<<num-1;
    return 0;
}
//下面是AC代码
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(long n)
{
    if(n == 2) return true;
    else
    {
        for(int i = 2;i <= sqrt(n) + 1;i++)
        {
            if(n % i == 0) return false;
        }
    }
    return true;
}
int main()
{
    int N , sum, num=0, p,a[10000];
    int j = 2;
    cin>>N;
    for(;j <= 2*N/3;j++)
    {
        if(isprime(j) && sum + j <= N)
        {
            sum += j;
            num ++;
            a[num] = j;
        }
    }
    for(int k = 1;k <= num;k++) cout<<a[k]<<endl;
    cout<<num;
    return 0;
}

2021/6/16 17:43
加载中...