二级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++二级真题 luogu-B4064 [GESP202412 二级] 寻找数字
📅 2025-02-13·✍️ OneCoder·计算中...·⏱️ 3 分钟
#GESP#C++#多重循环
GESP二级真题,多层循环和分支练习,难度★✮☆☆☆。
luogu-B4064 [GESP202412 二级] 寻找数字
题目要求
题目描述
小杨有一个正整数 ,小杨想知道是否存在一个正整数 满足 。
输入格式
第一行包含一个正整数 ,代表测试数据组数。
对于每组测试数据,第一行包含一个正整数代表 。
输出格式
对于每组测试数据,如果存在满足条件的正整数 ,则输出 ,否则输出 。
输入 #1
CONSOLE
4 行
3
16
81
10
输出 #1
CONSOLE
3 行
2
3
-1
说明/提示
对于全部数据,保证有 ,。
题目分析
解题思路
- 读取测试数据的数量 。
- 对于每组测试数据,读取正整数 。
- 计算4次方根 ,即 。
- 检查是否存在满足条件的正整数 ,即 。
- 如果存在满足条件的正整数 ,则输出 ,否则输出 。
注:如果用两层循环暴力寻找可能的整数,程序会超时。这里利用之前学到的一个小技巧,用数学方法求出四次方根,强转整数后再计算4次方,如果恰好是4次方根,则强转后的4次方等于待检查的数,否则不相等。
---·
示例代码
C++
24 行
#include <cmath>
#include <iostream>
using namespace std;
int main() {
int n; // 读取测试数据的数量
cin >> n;
int a; // 读取正整数 a
for (int i = 1; i <= n; i++) {
cin >> a;
bool flag = false; // 初始化标志位
double c = sqrt(sqrt(a)); // 计算4次方根
int d = (int)c; // 强转为整数
if (pow(d, 4) == a) { // 检查是否满足条件
flag = true; // 如果满足条件,则设置标志位为真
}
if (flag) {
cout << d << endl; // 如果存在满足条件的正整数,则输出
} else {
cout << -1 << endl; // 否则输出 -1
}
}
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
读者讨论与留言
💬 还没有读者留言,快来成为第一个讨论者吧!