OneCoder Avatar
OneCodercoderli.com · 937 篇博文
二级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【GESP】C++二级真题 luogu-b4002, [GESP202406 二级] 平方之和

📅 2025-02-11·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#多重循环

GESP二级真题,多层循环和分支练习,难度★✮☆☆☆。

luogu-B4002 [GESP202406 二级] 平方之和

题目要求

题目描述

小杨有 nn 个正整数 a1,a2,,ana_1,a_2,\dots,a_n,他想知道对于所有的 i(1in)i (1\le i\le n),是否存在两个正整数 xxyy 满足 x×x+y×y=aix\times x+y \times y=a_i

输入格式

第一行包含一个正整数 nn,代表正整数数量。 之后 nn 行,每行包含一个正整数,代表 aia_i

输出格式

对于每个正整数 aia_i,如果存在两个正整数 xxyy 满足 x×x+y×y=aix\times x+y \times y=a_i,输出 Yes,否则输出 No

输入 #1

BASH
2
5
4

输出 #1

BASH
Yes
No

说明/提示

对于第一个正整数,存在 1×1+2×2=51\times 1+2 \times 2=5,因此答案为 Yes

对于全部数据,保证有 1n10,1ai1061 \le n \le 10,1 \le a_i \le 10^6


题目分析

解题思路

  1. 读取输入的正整数数量 nn
  2. 遍历每个正整数 aia_i
  3. 对于每个 aia_i,初始化一个标志变量,用于标志是否找到满足条件的 xxyy
  4. 遍历可能的 xx 值,从 11ai\sqrt{a_i}
  5. 对于每个可能的 xx 值,计算可能的 yy 值:y=aix2y = \sqrt{a_i - x^2}
  6. 如果 yy 是整数(即强转后,不丢失小数位,所以可以验证原等式)且不为 00,则标志变量为真,退出循环。
  7. 根据标志变量的值,输出 YesNo

示例代码

CPP
#include <cmath>
#include <iostream>

using namespace std;
int main() {
    int n; // 输入的正整数数量
    cin >> n; // 读取输入的正整数数量
    int a1; // 每个正整数
    for (int i = 1; i <= n; i++) { // 遍历每个正整数
        cin >> a1; // 读取每个正整数
        bool flag = false; // 标志是否找到满足条件的x和y
        for (int k = 1; k * k < a1; k++) { // 遍历可能的x值
            double r = sqrt(a1 - k * k); // 计算可能的y值
            int d = (int)r; // 将y值转换为整数
            if (d * d + k * k == a1 && d != 0) { // 判断是否满足条件
                flag = true; // 如果满足条件,则标志为true
                break; // 并退出循环
            }
        }
        if (flag) { // 如果找到满足条件的x和y
            cout << "Yes" << endl; // 输出Yes
        } else { // 如果没有找到满足条件的x和y
            cout << "No" << endl; // 输出No
        }
    }
    return 0;
}

💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

💬 读者留言与交流

0 条讨论
✨ 支持 Markdown 语法格式
还没有留言,快来成为第一个讨论者吧!