程序求dalao纠错,找半天找不出来 - 爱问答

(爱问答)

程序求dalao纠错,找半天找不出来

题目是要讲几组区间里数据转换成二进制数,如果二进制数中只有一个0,则总数加一

比如输入:2                                                      输出:2

                 5  10                                                          1

                 2015 2015

就是说2组数据,第一组【5,10】中二进制只有一个0的有2个,输出2          

第二组【2015,2015】中二进制只有一个0的有一个输出1

#include<iostream>

#include<string>

#include<cstring>

#include<cstdio>

int main()

{

 int a[100],i,m,n,s=0,ls,zs=0,left,right,zu;

 i=0;

scanf("%d",&zu);

for (int j=1;j<=zu;j++)

{

scanf("%d%d",&left,&right);

for (int k=left;k<=right;k++)

{do

 {

  m=k/2;

  n=k%2;

     k=m;

  a[i++]=n;

 }while(m!=0); 

 i--;ls=i+1;

for (;ls>=0;ls--)

   {if (a[ls]==0)s++;

}

if (s==1)zs++;s=0; 

 }

printf("%d",zs);

}

 return 0;


首先你的循环算法有问题,你的

k=m;

在循环中改为循环变量的值,导致死循环了

其次,你题目的例样输入、输出也不对啊

5 6 7 8 9 10中

单单二进制的8就有3个0,结果怎么可能是2

而2015的二进制为

‭011111011111‬,它是2个0

以下是改过的程序

#include<iostream>

#include<string>

#include<cstring>

#include<cstdio>

int main()

{

    int a[100],i,m,n,s=0,ls,zs=0,left,right,zu;

  // i=0; 这个i不用的 

    scanf("%d",&zu);

    for (int j=1; j<=zu; j++)

        {

            scanf("%d%d",&left,&right);

            zs=0; //每组要初始化的 

            for (int k=left; k<=right; k++)

                {

                    ///你的循环完全不对 

                    m=k; //简单地就可以实现 

                    while(m)

                    {

                        m/=2;

                        zs+=!(m%2);

                    }

 

                }

            printf("%d ",zs); //输出加回车 

        }

    return 0;

}


下一篇:ActionEvent类事件源的对象分别是什么方法

上一篇:如何让excel表格中的两列数据相同的存货编码排列在一行,后面数据跟着动

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?