CSP-J 2022 初赛补全代码题解析
2022年的两道题,一道是枚举因数,一道是洪水填充(BFS)。难度中规中矩,但因数那道题在输出顺序上做了点小文章,需要留意一下。
第一题:枚举因数
题目描述
输入一个正整数 n,从小到大输出它的所有正因数。比如 n=36,输出 1 2 3 4 6 9 12 18 36。
代码用了优化方法:只枚举到 sqrt(n),把小于 sqrt(n) 的因数先存起来,然后输出对应的“大因数”。
代码框架
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> fac; fac.resize((int)ceil(sqrt(n))); int i; for (i = 1; i * i < n; ++i) { if (______) { // 1. fac.push_back(i); } } for (int k = 0; k < fac.size(); ++k) { cout << ______ << " "; // 2. } if (______) { // 3. cout << ______ << " "; // 4. } for (int k = fac.size() - 1;