luogu-B4064 [GESP202412 二级] 寻找数字
GESP二级真题,多层循环和分支练习,难度★✮☆☆☆。
luogu-B4064 [GESP202412 二级] 寻找数字
题目要求
题目描述
小杨有一个正整数 ,小杨想知道是否存在一个正整数 满足 。
输入格式
第一行包含一个正整数 ,代表测试数据组数。
对于每组测试数据,第一行包含一个正整数代表 。
输出格式
对于每组测试数据,如果存在满足条件的正整数 ,则输出 ,否则输出 。
输入 #1
3
16
81
10
输出 #1
2
3
-1
说明/提示
对于全部数据,保证有 ,。
题目分析
解题思路
- 读取测试数据的数量 。
- 对于每组测试数据,读取正整数 。
- 计算4次方根 ,即 。
- 检查是否存在满足条件的正整数 ,即 。
- 如果存在满足条件的正整数 ,则输出 ,否则输出 。
注:如果用两层循环暴力寻找可能的整数,程序会超时。这里利用之前学到的一个小技巧,用数学方法求出四次方根,强转整数后再计算4次方,如果恰好是4次方根,则强转后的4次方等于待检查的数,否则不相等。
{% include custom/custom-post-content-inner.html %}
—·
示例代码
#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;
}
{% include custom/custom-post-content-footer.md %}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on