前端自学向前一步中 2021-07-09 16:09 采纳率: 100%
浏览 23
已采纳

程序到底哪里出错了?求解

C语言

img

#include <stdio.h>
int  main()
{
    int n,m,h,i,j,f;
    int a[5000]={1};
    scanf("%d %d",&n,&m);
    if (n<=5000 && m<=n)
 {
        for(i=-1;i<=4998;i++)
        {
            a[i]=-1;
        }
        for(i=2;i<m;i++)
      {  
         h=i;
         for(j=h;j<=n;)
         {
          h=h*i;
          a[j]=-a[j];
         }
      }
     for (f=0;f<=n;f++)
     {
         if (a[f]=-1)
         {   
             printf("%d",f);
         }
     } 
 }
return 0;
}
  • 写回答

3条回答 默认 最新

  • qfl_sdu 2021-07-09 16:50
    关注

    代码修改如下:

    #include <stdio.h>
    int  main()
    {
        int n,m,h,i,j,f;
        int a[5000]={1};
        scanf("%d %d",&n,&m);
    
        //全部关闭
        for(i=0;i<n;i++)
            a[i]=0;
        
        if(m==1)
        {
            printf("灯全部关闭\n");
            return 0;
        }
    
        //printf("2:");
        //第二个人,将2的倍数的灯打开
        f = 0;
        for(i=0;i<n;i++)
        {
            if((i+1)%2 == 0)
                a[i] = 1;
            if(a[i] == 0)
                f++;
        }
        
        if(m==2)
        {
            for (i=0,j=0;i<n;i++)
            {
                if(a[i] == 0)
                {
                    if(j<f-1)
                        printf("%d,",i+1);
                    else
                        printf("%d\n",i+1);
                    j++;
                }
            }
            return 0;
        }
        
        h = 3;
        while(h<=m)
        {
            f = 0; //记录关闭的灯的个数
            for(i=0;i<n;i++)
            {
                //是h倍数的都翻转
                if((i+1)%h == 0)
                {
                    if(a[i] == 0)
                        a[i] = 1;
                    else
                        a[i] = 0;
                }
                if(a[i] == 0)
                    f++;
            }
            h++;
        }
        for (i=0,j=0;i<n;i++)
        {
            if(a[i] == 0)
            {
                if(j<f-1)
                    printf("%d,",i+1);
                else
                    printf("%d\n",i+1);
                j++;
            }
        }
    
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 7月9日
  • 创建了问题 7月9日

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大