霸气的灯塔 2023-10-30 00:26 采纳率: 60%
浏览 4
已结题

循环,结果只输出一半需要输出的数值

写个题,编译没有问题,运行的时候就只会打印部分需要打印的数值,怎么改进啊,求指导

img

img

img

img

img

  • 写回答

4条回答 默认 最新

  • a5156520 2023-10-30 09:45
    关注

    修改如下:

    
    #include <stdio.h>
    #include <math.h>
    
    int main(void){
        
        int L,i,j=2,n=0,s=0;
        int flag=1;
        scanf("%d",&L);
        
        while(s<L){
            
            
            
            i=2;
            flag=1;
            while(i<=sqrt(j)){
                if(j%i==0){
                    flag=0;
                    break; // 如果j可以被i整除,则j不是素数,break退出循环 
                }else{
                    i=i+1;
                //    flag=1; // 这里素数标志不能置1,否则可能会导致判断素数出错 
                }
            }
            
            if(flag==1){  // 这里flag=1改为flag==1 
                
                s=s+j;
                if(s>L){  // 当累加当然质数后,如果和s大于口袋的负载量L,则需要从s中减去这个新增加的质数,并break退出循环 
                    s=s-j;
                    break;
                }else{    // 如果新增加质数后,和s没有超过口袋负载量L,则打印当前质数,并且质数数量+1        
                    printf("%d\n",j);
                    n=n+1;    
                }
                
            }
            j=j+1;
            
        }
        
        printf("%d",n);  // 因为计算的n,没有包括超出负载量的质数,所以这里直接打印n即可 
        
        return 0;
        
    } 
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 10月30日