2401_85844175 2024-07-16 13:54 采纳率: 50%
浏览 3
已结题

唯一的0(c++编程问题)

在一个区间内,有多少个整数的二进制表示恰好有一个 0?
输入
共一行,两个整数 a 和 b。
输出
一个整数,表示满足条件的整数数量。
0<=a<=b<=10^18
要求1: 严禁使用vector,auto;尽量不使用数据结构,除非迫不得已;大部分时候用#include<bits/stdc++.h>,using namespace std,scanf,printf,const int N=……,数组下标从一开始,大部分时候写i++,j++……,不写++i,++j,…… 要求2: 数组最大不能开超过100000000,时间复杂度最坏不能超过100000000,用c++语言,写出不超时正确代码 记住,得满足上面的要求1和要求2!
别超时,0<=a<=b<=10^18
样例
输入1
1 10
输出1
3
输入2
0 0
输出2
1

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-16 13:54
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    这个问题可以通过数学分析来解决。首先,我们需要理解二进制表示中只有一个0的整数的分布规律。对于任意一个整数,如果它的二进制表示中只有一个0,那么这个0可以出现在从最低位到倒数第二位的任意位置。例如,对于一个5位的二进制数,它可以是:

    • 10111
    • 11011
    • 11101
    • ...

    但不会是:

    • 11110(有两个0)
    • 1(只有一个1,没有0)

    对于一个长度为n的二进制数,恰好有一个0的情况有n-1种。但是,我们还需要考虑到ab的二进制表示可能不是等长的。例如,如果a是5位,而b是6位,我们需要分别计算5位和6位的情况,然后累加。

    下面是一个C++程序的示例,它遵循了你的要求:

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int a, b;
        scanf("%d %d", &a, &b);
    
        long long count = 0;
        int maxLen = 0;
        for (int i = a; i <= b; i++) {
            int len = 0;
            for (; i; i >>= 1) {
                len++;
            }
            maxLen = max(maxLen, len);
        }
    
        for (int i = 1; i <= maxLen; i++) {
            count += i - 1; // 长度为i的二进制数中恰好有一个0的数有i-1个
        }
    
        // 减去a-1之前的所有情况
        for (int i = 1; i < a; i++) {
            for (; i; i >>= 1) {
                if (i & 1) {
                    count--;
                    break;
                }
            }
        }
    
        printf("%lld\n", count);
        return 0;
    }
    

    请注意,这个程序没有使用vectorauto,并且尽量遵循了你的格式要求。但是,它可能不满足时间复杂度的要求,因为对于非常大的ab,程序将会变得非常慢。这个问题的关键在于找到一个更高效的算法来计算恰好有一个0的整数的数量,而不是逐个检查每个整数。这可能需要更深入的数学分析和优化。

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

报告相同问题?

问题事件

  • 系统已结题 7月24日
  • 已采纳回答 7月16日
  • 创建了问题 7月16日

悬赏问题

  • ¥50 HAL ADCDMA单次触发转换
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置