#L0004. 算法基础汇总——2019~2025 CSP-J初赛

算法基础汇总——2019~2025 CSP-J初赛

  1. (2019年第5题)设有 100100 个已排好序的数据元素,采用折半查找时,最大比较次数为()

{{ select(1) }}

  • 7
  • 10
  • 6
  • 8
  1. (2019年第11题)新学期开学了,小胖想减肥,健身教练给小胖制定了两个训练方案。
  • 方案一:每次连续跑 33 公里可以消耗 300300 千卡(耗时半小时);
  • 方案二:每次连续跑 55 公里可以消耗 600600 千卡(耗时 11 小时)。

小胖每周周一到周四能抽出半小时跑步,周五到周日能抽出一小时跑步。 另外,教练建议小胖每周最多跑21公里,否则会损伤膝盖。 请问如果小胖想严格执行教练的训练方案,并且不想损伤膝盖,每周最多通过跑步消耗多少千卡?()

{{ select(2) }}

  • 3000
  • 2500
  • 2400
  • 2520
  1. (2020年第5题)冒泡排序算法的伪代码如下:
输入:数组L, n ≥ k。输出:按非递减顺序排序的 L。
算法 BubbleSort:
   1. FLAG ← n //标记被交换的最后元素位置
   2. while FLAG > 1 do
   3.     k ← FLAG -1
   4.     FLAG ← 1
   5.     for j=1 to k do
   6.         if L(j) > L(j+1) then do
   7.              L(j)  ↔ L(j+1)
   8.              FLAG ← j

nn 个数用以上冒泡排序算法进行排序,最少需要比较多少次?( )。

{{ select(3) }}

  • n2n^2
  • n2n-2
  • n1n-1
  • nn
  1. (2020年第6题)设 AAnn 个实数的数组,考虑下面的递归算法:
XYZ (A[1..n])
1.  if n=1 then return A[1]
2.  else temp ← XYZ (A[1..n-1])
3.  if temp < A[n]
4.  then return temp
5.  else return A[n]

请问算法 XYZ 的输出是什么?()。

{{ select(4) }}

  • A 数组的平均
  • A 数组的最小值
  • A 数组的中值
  • A 数组的最大值
  1. (2021年第4题)以比较作为基本运算,在 NN 个数中找出最大数,最坏情况下所需要的最少的比较次数为 ( )。

{{ select(5) }}

  • N2N^{2}
  • NN
  • N1N-1
  • N+1N+1
  1. (2021年第13题)考虑如下递归算法
solve(n)
     if n<=1 return 1
      else if n>=5 return n*solve(n-2)
      else return n*solve(n-1)

则调用 solve(7) 得到的返回结果为( )。

{{ select(6) }}

  • 105
  • 840
  • 210
  • 420
  1. (2021年第15题)有四个人要从 A 点坐一条船过河到 B 点,船一开始在 A 点。该船一次最多可坐两个人。 已知这四个人中每个人独自坐船的过河时间分别为 1,2,4,81, 2, 4, 8,且两个人坐船的过河时间为两人独自过河时间的较大者。则最短( )时间可以让四个人都过河到 B 点(包括从 B 点把船开回 A 点的时间)。

{{ select(7) }}

  • 14
  • 15
  • 16
  • 17
  1. (2022年第12题)以下排序算法的常见实现中,哪个选项的说法是错误的:( )。

{{ select(8) }}

  • 冒泡排序算法是稳定的
  • 简单选择排序是稳定的
  • 简单插入排序是稳定的
  • 归并排序算法是稳定的
  1. (2022年第15题)以下对递归方法的描述中,正确的是:( )。

{{ select(9) }}

  • 递归是允许使用多组参数调用函数的编程技术
  • 递归是通过调用自身来求解问题的编程技术
  • 递归是面向对象和数据而不是功能和逻辑的编程语言模型
  • 递归是将用某种高级语言转换为机器代码的编程技术
  1. (2023年第7题)以下关于高精度运算的说法错误的是()

{{ select(10) }}

  • 高精度计算主要是用来处理大整数或需要保留多位小数的运算
  • 大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将除数乘以某个数,通过减法得到新的被除数,并累加商
  • 高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关
  • 高精度加法运算的关键在于逐位相加并处理进位
  1. (2024年第9题)假设有序表中有 10001000 个元素,则用二分法查找元素 XX 最多需要比较( )次。

{{ select(11) }}

  • 25
  • 10
  • 7
  • 1
  1. (2025年第3题)函数 calc(n) 的定义如下,则 calc(5) 的返回值是多少?( )
int calc(int n) {
    if (n <= 1) return 1;
    if (n % 2 == 0) return calc(n / 2) + 1;
    else return calc(n - 1) + calc(n - 2);
}

{{ select(12) }}

  • 55
  • 66
  • 77
  • 88
  1. (2025年第8题)已知 f[0]=1f[0] = 1, f[1]=1f[1] = 1,并且对于所有 n2n \geq 2f[n]=(f[n1]+f[n2])%7f[n] = (f[n-1] + f[n-2]) \% 7。那么 f[2025]f[2025] 的值是多少?

{{ select(13) }}

  • 22
  • 44
  • 55
  • 66
  1. (2025年第12题)某同学用冒泡排序对数组 {6,1,5,2,4}\{6, 1, 5, 2, 4\} 进行升序排序,请问需要进行多少次元素交换?

{{ select(14) }}

  • 55
  • 66
  • 77
  • 88