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;
相关推荐
朝朝辞暮i8 分钟前
C++ 第 33 课:事件循环——spin() 到底在干什么
开发语言·c++·算法
殷色玫瑰20 分钟前
AVL树:从平衡因子到四种旋转的完整实现
c语言·数据结构·c++·算法·visualstudio
进化中的刀盾兽1 小时前
从零实现 C++ AI 大模型接入 SDK(九):LLMManager 统一模型管理与请求路由
c++
会周易的程序员1 小时前
STVM OSAL 层架构设计文档
c++·物联网·嵌入式·虚拟机·iot·软plc·iec61131
.YM.Z1 小时前
C++——【红黑树】原理详解:定义、性质、插入变色与旋转实现
开发语言·c++
无名猿2 小时前
constexpr 能力扩张:从 C++11 到 C++20 的编译期计算
c++·性能优化·现代c++·编译期
007张三丰2 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·c语言·c++·内存管理
三月微暖寻春笋3 小时前
【和春笋一起学C++】(七十二)类模板
开发语言·c++·实例·类模板·使用类模板·数组模板
xlq223223 小时前
全面复习4
c++
殷色玫瑰3 小时前
C++ STL:map 与 set 详解——从底层红黑树到实际应用
c语言·数据结构·c++·算法·visualstudio·rpc