- 吐吐很快乐
GESP202506 二级,幂和数题解
- 2025-7-2 16:17:59 @
#include <iostream>
using namespace std;
int main() {
// 定义变量:
// l 和 r:要判断的区间范围 [l, r]
// a 和 b:用于表示幂数(2的幂次方数,如1,2,4,8...)
// n:两个幂数相加的结果
// cnt:计数器,统计在区间内的幂和数个数
int l, r, a, b, n, cnt = 0;
// 读入区间范围
cin >> l >> r;
// 第一个幂数a从1开始(2^0)
a = 1;
// 外层循环:遍历所有可能的第一个幂数a
// 条件:a不超过区间的上限r
while (a <= r) {
// 第二个幂数b从当前的a开始
b = a;
// 内层循环:遍历所有可能的第二个幂数b
// 条件:b不超过区间的上限r
while (b <= r) {
// 计算两个幂数的和
n = a + b;
// 判断这个和是否在目标区间内
if (n >= l && n <= r) {
cnt++; // 如果在区间内,计数器加1
}
// b乘以2,得到下一个更大的幂数(如2→4→8)
b *= 2;
}
// a乘以2,得到下一个更大的幂数(如1→2→4)
a *= 2;
}
// 输出区间内幂和数的总个数
cout << cnt << endl;
return 0;
}
代码思维解析(适合小学生理解)
- 什么是幂和数? 幂数:像1, 2, 4, 8, 16...这样翻倍增长的数字(2的幂次方)
幂和数:两个幂数相加的结果(如1+2=3, 2+2=4, 1+4=5)
- 解题思路(像做游戏一样简单!) 准备阶段:
画一个数字区间(比如从5到20)
准备两套相同的"幂数卡片":1,2,4,8...
配对游戏:
从第一套卡片取一张(比如1)
从第二套卡片取不小于第一张的卡片(1,2,4...)
把两张卡片数字相加(1+1=2, 1+2=3, 1+4=5...)
如果和在目标区间内就记一分
换卡片规则:
第二套卡片用完后,换第一套的下一张(1→2)
第二套重新从新卡片开始(2→2,4...)
直到所有卡片组合都试过
- 关键技巧 翻倍增长:每次a*=2和b*=2就像卡片翻倍(1→2→4→8)
避免重复:b从a开始保证不重复(如先1+2,不会再有2+1)
区间判断:只记录在l和r之间的和
0 条评论
目前还没有评论...