正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2022 第一轮真题 › 第 37 题
CSP-J 2022 第一轮 第 37 题:枚举因数:③处应填
题目
(枚举因数)从小到大打印正整数 $n$ 的所有正因数。
试补全枚举程序。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> fac;
fac.reserve((int)ceil(sqrt(n)));
int i;
for (i = 1; i * i < n; ++i){
if (①){
fac.push_back(i);
}
}
for (int k = 0; k < fac.size(); ++k){
cout << ② << "";
}
if (③) {
cout << ④ << "";
}
for (int k = fac.size() - 1; k >= 0; --k){
cout << ⑤ << "";
}
}
本小题
③处应填( )
选项
- A. (i-1)*(i-1)== n
- B. (i-1)*i == n
- C. i*i == n
- D. i*(i-1) == n
答案
C
题解
选 **C. i*i == n**。
第一个循环的条件是 i * i < n,因此退出循环时,i * i >= n。
因数通常成对出现:若 i 是因数,则 n / i 也是因数。程序先正序输出较小的因数,再倒序输出对应的较大因数。
当 n 是完全平方数时,因数 √n 没有在第一个循环中被加入 fac,需要在中间单独输出一次。因此③应判断:
``cpp i * i == n ``
例如 n = 36,循环结束时 i = 6,此时需要补上因数 6。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号