#1399. 建华实验2025.03 月测

建华实验2025.03 月测

1. 枚举法应用

下面的代码片段目的是找到两个数的所有公共因子并按照从小到大的顺序输出,以下代码是否有误?

int a = 12, b = 18;
for(int i = 1; i <= a && i <= b; i++) {
    if(a % i == 0 && b % i == 0) {
        cout << i << " ";
    }
}

{{ select(1) }}

  • 没有错误
  • 会漏掉一些公共因子
  • 程序输出的公共因子顺序错了
  • 会导致无限循环

2. 结构体排序

假设有如下结构体:

struct Student {
    string name;
    int score;
};

如果要根据成绩对一组学生进行降序排序,以下哪种方法是正确的? {{ select(2) }}

  • 使用 sort(students.begin(), students.end(), compare);,其中 comparebool compare(Student a, Student { return a.score < b.score; }
  • 使用 sort(students.begin(), students.end(), compare);,其中 comparebool compare(Student a, Student { return a.score > b.score; }
  • 使用 sort(students.begin(), students.end(), compare);,其中 comparebool compare(Student a, Student { return a.name < b.name; }
  • 使用 sort(students.begin(), students.end(), compare);,其中 comparebool compare(Student a, Student { return a.score == b.score; }

3. 数位分离

以下代码用于按从左到右的顺序输出 整数 num = 12345 的每一位数字,存在什么错误?

int num = 12345;
while(num > 0) {
    int digit = num % 10;
    num /= 10;
    cout << digit;
}

{{ select(3) }}

  • 输出的数字顺序错误
  • 输出的数字正确,但没有换行
  • 无法输出最后一个数字
  • 程序无法运行

4. 递归调用分析

以下是一个递归函数的调用过程:

int factorial(int n) {
    if(n == 0) return 1;
    return n * factorial(n - 1);
}

对于输入 n = 5,以下哪个选项正确描述了递归函数的行为? {{ select(4) }}

  • 递归函数会进行5次调用,最后返回1
  • 递归函数会进行5次调用,然后返回结果120
  • 递归函数会进行10次调用
  • 递归函数在栈上会发生溢出

5. 递归深度与时间复杂度

以下代码使用递归计算斐波那契数列,时间复杂度是多少?

int fib(int n) {
    if(n <= 1) return n;
    return fib(n - 1) + fib(n - 2);
}

{{ select(5) }}

  • O(n)
  • O(log n)
  • O(2^n)
  • O(n^2)