为什么会部分正确,哪里有问题,可以讲一下理由吗

img


#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    int j=2,sum=0,k,n=0;
    int d[1000],l=0;
    while(1)
    {
        for(k=2;k<=j;k++)
        {
            if(j%k==0)
            break;
        }
        if(j==k)
        {
            sum=sum+j;
            n++;
            printf("%d\n",j);
        }
        if(sum>=a)
        break;
        else
        j++;
        
    }
    printf("%d",n);
    return 0;
}
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/805145573446164.png "#left")

img


#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    int j=2,sum=0,k,n=0;
    int d[1000],l=0;
    while(1)
    {
        for(k=2;k<=j;k++)
        {
            if(j%k==0)
            break;
        }
        if(j==k)
        {
            sum=sum+j;
            if(sum>a)
            break;
            n++;
            printf("%d\n",j);
        }
        j++;
    }
    printf("%d",n);
    return 0;
}

第20行,先判断 if(sum>=a) ,再输出

你这个代码理解起来可能有点费劲,我给你个代码参考一下吧,是C++的,改成C的话,改一下输入输出就行。别忘了采纳一下哦

#include<iostream>
bool prime(int n)
{
    const int t = sqrt(n);
    for (int i = 2; i <= t; ++i)
    {
        if (n % i == 0)
            return false;
    }
    return true;
}
int main()
{
    //贪心算法,从最小的质数开始装
    int L, count = 0;
    std::cin >> L;
    for (int i = 2; i <= L; ++i)
    {
        if (prime(i))
        {
            std::cout << i << '\n';
            L -= i;
            ++count;
        }
    }
    std::cout << count;
    return 0;
}