2022CSP完善程序

#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 << ⑤ << " ";
    }
}
  1. ①处应填()
    A. n % i == 0
    B. n % i == 1
    C. n % (i-1) == 0
    D. n % (i-1) == 1
  2. ②处应填( )
    A. n / fac[k]
    B. fac[k]
    C. fac[k]-1
    D. n / (fac[k]-1)
  3. ③处应填( )
    A. (i-1) * (i-1) == n
    B. (i-1) * i == n
    C. i * i == n
    D. i * (i-1) == n
  4. ④处应填( )
    A. n-i
    B. n-i+1
    C. i-1
    D. I
  5. ⑤处应填( )
    A. n / fac[k]
    B. fac[k]
    C. fac[k]-1
    D. n / (fac[k]-1)

35、【答案】A【解析】判断 i 是 n 的一个因数,则加入数组 fac 中,因此判断条件为

36、【答案】B【解析】当前数组 fac 存储的是小于平方根的所有因 数,按顺序输出即可。

37、【答案】C【解析】特判,如果是完全平方数 i * i == n,则输 出算术平方根 i。

38、【答案】D【解析】如果是完全平方数 i * i == n,则输出算术 平方根 i。

39、【答案】A【解析】从小到大输出大于算术平方根的因数,因此 需要倒序枚举小于算术平方根的因数 fac[k],输出对应的另一个因数 n / fac[k]

#include <bits/stdc++.h>
using namespace std;
const int ROWS = 8;
const int COLS = 8;

struct Point {
    int r, c;
    Point(int r, int c) : r(r), c(c) {}
};

bool is_valid(char image[ROWS][COLS], Point pt,
    int prev_color, int new_color) {
    int r = pt.r;
    int c = pt.c;
    return (0 <= r && r < ROWS && 0 <= c && c < COLS &&
    ① && image[r][c] != new_color);
}

void flood_fill(char image[ROWS][COLS], Point cur, int new_color) {
    queue<Point> queue;
    queue.push(cur);
    int prev_color = image[cur.r][cur.c];
    ② ;

     while (!queue.empty()) {
        Point pt = queue.front();
        queue.pop();

        Point points[4] = { ③ , Point(pt.r - 1, pt.c),
        Point(pt.r, pt.c + 1), Point(pt.r, pt.c - 1)};
        for (auto p : points) {
            if (is_valid(image, p, prev_color, new_color)) {
                ④ ;
                ⑤ ;
            }
        }
    }
}

int main() {
    char image[ROWS][COLS] = {{'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'},
    {'g', 'g', 'g', 'g', 'g', 'g', 'r', 'r'},
    {'g', 'r', 'r', 'g', 'g', 'r', 'g', 'g'},
    {'g', 'b', 'b', 'b', 'b', 'r', 'g', 'r'},
    {'g', 'g', 'g', 'b', 'b', 'r', 'g', 'r'},
    {'g', 'g', 'g', 'b', 'b', 'b', 'b', 'r'},
    {'g', 'g', 'g', 'g', 'g', 'b', 'g', 'g'},
    {'g', 'g', 'g', 'g', 'g', 'b', 'b', 'g'}};

    Point cur(4, 4);
    char new_color = 'y';

    flood_fill(image, cur, new_color);

    for (int r = 0; r < ROWS; r++) {
        for (int c = 0; c < COLS; c++) {
            cout << image[r][c] << " ";
        }
        cout << endl;
    }
// 输出:
// g g g g g g g g
// g g g g g g r r
// g r r g g r g g
// g y y y y r g r
// g g g y y r g r
// g g g y y y y r
// g g g g g y g g
// g g g g g y y g
    return 0;
}
  1. ①处应填( )
    A. image[r][c] == prev_color
    B. image[r][c] != prev_color
    C. image[r][c] == new_color
    D. image[r][c] != new_color
  2. ②处应填( )
    A. image[cur.r+1][cur.c] = new_color
    B. image[cur.r][cur.c] = new_color
    C. image[cur.r][cur.c+1] = new_color
    D. image[cur.r][cur.c] = prev_color
  3. ③处应填( )
    A. Point(pt.r, pt.c)
    B. Point(pt.r, pt.c+1)
    C. Point(pt.r+1, pt.c)
    D. Point(pt.r+1, pt.c+1)
  4. ④处应填( )
    A. prev_color = image[p.r][p.c]
    B. new_color = image[p.r][p.c]
    C. image[p.r][p.c] = prev_color
    D. image[p.r][p.c] = new_color
  5. ⑤处应填( )
    A. queue.push( p )
    B. queue.push(pt)
    C. queue.push(cur)
    D. queue.push(Point(ROWS,COLS))

40、【答案】A【解析】判断 image[r][c]为旧颜色 prev_color 时, 需要更新颜色,因此选 A。

41、【答案】B【解析】将起点位置 image[cur.r][cur.c]更新颜色, 选 B。

42、【答案】C【解析】上下左右四个相邻点,可以发现少了点(pt.r+1, pt.c)。

43、【答案】D【解析】将当前位置 image[p.r][p.c]更新颜 色,选 D。

44、【答案】A【解析】如果 p 点符合要求,则将 p 点加入队列,选 A。

【题目考点】

1. 广搜 连通块问题
2. auto关键字

使用auto关键字可以让编译器自动确定声明的变量的类型。
例:auto p = 3.2(auto在这里相当于double)
例:vector<int> vec; auto it = vec.begin();(auto在这里相当于vector<int>::iterator)

3. for冒号

遍历一个可迭代对象中的所有元素。可迭代对象可以为:数组或vector、list等stl容器。
for(元素类型 变量名 : 可迭代对象)
元素类型为可迭代对象中元素的类型。可以写auto来自动设置元素类型。
取到的变量是值,改变该变量不会改变可迭代对象中元素的值。
for(元素类型 &变量名 : 可迭代对象)
取到的变量是引用,改变该变量会改变可迭代对象中元素的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值