2026年6月GESP真题及题解(C++二级):完全平方数计数

2026年6月GESP真题及题解(C++二级):完全平方数计数

题目描述

小杨同学正在研究完全平方数。

平方: 一个数的平方等于这个数乘以这个数本身。

完全平方数: 指可以恰好表示为某个正整数的平方的数。

例如, 9 9 9 是完全平方数,因为 9 = 3 2 = 3 × 3 9 = 3^2 = 3 \times 3 9=32=3×3;但 27 27 27 不是,因为 27 27 27 不能表示为任何正整数的平方。

给定两个正整数 l l l 和 r r r(保证 l ≤ r l \le r l≤r),小杨同学想知道 l l l 到 r r r 之间的所有正整数中(包含 l l l 和 r r r),有多少个数是完全平方数。

输入格式

输入两行,第一行为一个正整数 l l l,第二行为一个正整数 r r r。

输出格式

输出一个非负整数,表示 l l l 到 r r r 中,有多少个正整数是完全平方数。如果 l l l 到 r r r 中没有完全平方数,则输出 0 0 0。

输入输出样例 1
输入 1
复制代码
1
21
输出 1
复制代码
4
说明/提示
样例解释 1

在 1 1 1 到 21 21 21 中,有以下 4 4 4 个整数是完全平方数:

1 , 4 , 9 , 16 1, 4, 9, 16 1,4,9,16。

数据范围

1 ≤ l ≤ r ≤ 2000 1 \le l \le r \le 2000 1≤l≤r≤2000。


思路分析(方法1)

完全平方数即某个正整数 k 的平方 。给定区间 [l, r],我们需要统计满足 l ≤ k² ≤ r 的整数 k 的个数。

由于 r ≤ 2000k 的最大值不超过 ⌊ 2000 \sqrt{2000} 2000 ⌋ = 44(因为 44² = 1936 ≤ 2000,45² = 2025 > 2000)。因此我们可以枚举 k 从 1 开始,计算 ,只要 k² ≤ r 就继续。对于每个平方数,判断它是否 ≥ l,若是则计数器加一。

代码实现(方法1)

cpp 复制代码
#include <bits/stdc++.h> 
using namespace std;

int main() {
    int l, r;//定义左右边界
    cin >> l >> r;//输入l和r
    int ans = 0; //答案计数器
    for (int i = 1; i * i <= r; ++i) { //枚举正整数i,直到i²>r
        if (i * i >= l) ++ans;  //若平方数在区间内则计数
    }
    cout << ans;//输出结果
    return 0;
}

功能分析(方法1)

  • 输入处理 :从标准输入读取两个正整数 lr,保证 l ≤ r

  • 枚举平方数 :循环变量 i 从 1 开始,每次检查 i*i 是否超过 r,若超过则停止。由于 i 递增,平方数也递增,因此不会遗漏。

  • 区间判定 :对每个平方数 i*i,只需判断其是否 ≥ l,因为循环条件已保证它 ≤ r,所以满足条件的平方数一定在区间内。

  • 输出结果 :输出计数器 ans,该值即为区间内完全平方数的个数。若不存在,则 ans 保持 0,输出 0。


    思路分析(方法2)

    本题要求统计区间 [l, r] 内完全平方数的个数。完全平方数是指能表示为某个正整数平方的数。

    最直观的做法是枚举区间内的每一个整数 i,然后判断它是否为完全平方数。判断方法:计算 i 的平方根并向下取整得到 y,若 y * y == i,则 i 是完全平方数。

    因为 r ≤ 2000,枚举最多 2000 次,每次判断为常数时间,完全可行。

    代码实现(方法2)

    cpp 复制代码
    #include<bits/stdc++.h>
    using namespace std;
    int l,r,cnt=0;//左右边界和计数器
    //check函数:判断x是否为完全平方数
    bool check(int x){
        int y=sqrt(x);//取平方根整数部分
        return y*y==x;//判断平方是否等于原数
    }
    int main(){
        cin>>l>>r;//读入区间
        for(int i=l;i<=r;i++){//枚举每个整数
            if(check(i)) cnt++;//计数完全平方数
        }
        cout<<cnt;
        return 0;
    }

    功能分析(方法2)

    • 输入处理 :从标准输入读取两个正整数 lr,保证 l ≤ r
    • 核心逻辑
      • 自定义函数 check(x) 利用 sqrt 和误差修正判断 x 是否为完全平方数。
      • 主函数中循环遍历 [l, r] 内的所有整数,调用 check 并累计满足条件的个数。
    • 输出 :打印计数器 cnt,即为区间内完全平方数的数量。若无,则输出 0

各种学习资料,助力大家一站式学习和提升!!!

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:

https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:

https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:

https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:

https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
zwenqiyu1 小时前
非线性字符串数据结构串讲
数据结构·c++·学习·算法
努力中的编程者2 小时前
STL-vector的模拟实现
开发语言·c++·算法·stl·vector
没文化的阿浩2 小时前
【C++】详解继承机制
开发语言·c++
拳里剑气3 小时前
C++算法:队列与BFS
c++·算法·bfs·宽度优先·队列
aaPIXa6223 小时前
C++模板元编程:在编译期完成计算,实现零运行时开销
java·开发语言·c++
郝学胜-神的一滴3 小时前
CMake 038:OBJECT目标复用编译+Linux动态库版本自动化管理
linux·c++·程序人生·软件工程·软件构建·cmake·工程配置
Sylvia-girl4 小时前
第八站:vector及其常用操作【上】
c++
Sunsets_Red4 小时前
浅谈博弈论
c++·学习·编程·博弈论·信息学竞赛·巴巴博弈
ALex_zry5 小时前
C++26 std::inplace_vector 详解:零堆分配的定容向量
开发语言·c++