GESP 25年6月2级 幂和数

【题目链接】

一本通 4124 幂和数
洛谷 B4357 幂和数


【题目考点】

  1. 循环结构(嵌套);

  2. 枚举法;

  3. 幂运算(pow函数);

  4. 标记法;


【解题逻辑】

  1. 定义变量 sum 并初始化为 0,用于统计 l~r 之间的幂和数个数;

  2. 枚举l~r之间的每一个数字i:

  • 初始化标记变量 f=0(表示默认 i 不是幂和数);
  • 嵌套枚举两个 2 的次幂(j 和 k 的范围 0~13,因 =8192,=16384 已超出规定数据范围);
  • 计算两个 2 的次幂之和 s1+s2,若等于当前数字 i,则将标记 f 设为 1 并跳出内层循环;
  1. 若数字 i 的标记 f=1(是幂和数),则 sum 加 1;

  2. 遍历完成后,输出统计结果 sum;


【题解代码】

  1. 输入两个整数 l 和 r:代表需要判断的数字范围;
cpp 复制代码
int l,r;
cin>>l>>r;
int sum=0;
  1. 遍历 l~r 之间的每个数字,判断是否为幂和数;
cpp 复制代码
for(int i=l;i<=r;i++){
    int f=0;// 标记变量:0表示不是幂和数,1表示是
    // 枚举第一个2的次幂(j从0到13,2^13=8192满足常规范围)
    for(int j=0;j<=13;j++){
        int s1=pow(2,j);// 计算2的j次幂
        // 枚举第二个2的次幂(k从0到13)
        for(int k=0;k<=13;k++){
            int s2=pow(2,k);// 计算2的k次幂
            if(s1+s2==i){// 两个2的次幂和等于i,说明是幂和数
                f=1;// 标记为是幂和数
                break;// 找到符合条件的组合,跳出内层循环
            }
        }
        // 优化:若已找到符合条件的组合,无需继续枚举j
        if(f==1) break;
    }
    if(f==1){// 是幂和数则计数+1
        sum++;
    }
}
  1. 输出统计结果;
cpp 复制代码
cout<<sum;
相关推荐
CoderCodingNo1 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法
hetao17338372 小时前
2026-04-09~12 hetao1733837 的刷题记录
c++·算法
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 136. 只出现一次的数字 | C++ 哈希表&异或基础解法
c++·算法·leetcode
汉克老师3 小时前
GESP2024年6月认证C++三级( 第二部分判断题(1-10))
c++·数组·位运算·补码·gesp三级·gesp3级
无限进步_4 小时前
【C++】只出现一次的数字 II:位运算的三种解法深度解析
数据结构·c++·ide·windows·git·算法·leetcode
小贾要学习4 小时前
【Linux】TCP网络通信编程
linux·服务器·网络·c++·网络协议·tcp/ip
哎嗨人生公众号5 小时前
手写求导公式,让轨迹优化性能飞升,150ms变成9ms
开发语言·c++·算法·机器人·自动驾驶
code_whiter5 小时前
C++6(模板)
开发语言·c++
一只旭宝5 小时前
【C++ 入门精讲1】初始化、const、引用、内联函数 | 超详细手写笔记(附完整代码)
开发语言·c++
旖-旎5 小时前
哈希表(字母异位次分组)(5)
数据结构·c++·算法·leetcode·哈希算法·散列表