正在载入在线练习界面,本页内容可直接阅读…

AK CSP › CSP-J 2024 第一轮真题 › 第 34 题

CSP-J 2024 第一轮 第 34 题:判断平方数:②处应填

完善程序 · 枚举与模拟 · 难度 中等 · 答案 B

题目

(判断平方数) 问题:给定一个正整数 $n$,希望判断这个数是否为完全平方数,即存在一个正整数 $x$,使得 $x$ 的平方为 $n$。

试补全程序。

#include<iostream>
#include<vector>
using namespace std;

bool isSquare(int num) {
    int i = _①_;
    int bound = _②_;
    for (; i <= bound; ++i) {
        if (_③_) {
            return _④_;
        }
    }
    return_⑤_;
}

int main() {
    int n;
    cin >> n;
    if (isSquare(n)) {
        cout << n << " is a square number" << endl;
    } else {
        cout << n << " is not a square number" << endl;
    }
    return 0;
}
CSP-J 2024 第一轮 第 34 题 原题
原题扫描(页面加载后可直接在线作答)

本小题

② 处应填(  )

选项

  • A. (int)floor(sqrt(num))-1
  • B. (int)floor(sqrt(num))
  • C. floor(sqrt(num/2))-1
  • D. floor(sqrt(num/2))

答案

B

题解

选 B. (int)floor(sqrt(num))。

如果 num 是完全平方数,它的正整数平方根就是 sqrt(num)。因此枚举 i 时,必须能检查到这个值。

floor 表示向下取整,所以可以设置: ``cpp int bound = (int)floor(sqrt(num)); ` 配合循环条件 i <= bound,依次检查 i * i == num`。

例如 num = 9,需要枚举到 i = 3:

  • B 的上界是 3,可以正确判断。
  • A 的上界是 2,会漏掉 3。
  • C、D 先将 num 除以 2,上界更小,也会漏掉正确答案。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号