完善程序技巧

概念讲解

解题步骤

  1. 理解算法: 程序在做什么?
  2. 分析逻辑: 缺失部分的作用是什么?
  3. 排除选项: 逐一验证
  4. 代入检验: 用样例验证

常见类型

类型 说明
循环条件 for/while 的条件
边界条件 if 的条件
递推公式 赋值语句
返回值 return 语句

排除法技巧

  1. 看上下文: 前后代码的逻辑
  2. 看变量: 变量的含义和用途
  3. 看输出: 期望的输出结果
  4. 代入选项: 逐一验证

考点分析

初赛考查方式

  1. 完善程序题: 补全代码
  2. 选择题: 选择正确选项

常见考点

  • 循环条件判断
  • 递推公式推导
  • 边界条件确定

例题精讲

例题 1:循环条件

题目: 求 1+2+...+n,循环条件是什么?

1234int sum = 0;
for (int i = 1; ______; i++) {
    sum += i;
}

解答:

循环条件是 i <= n

例题 2:递推公式

题目: 斐波那契数列,递推公式是什么?

1234f[0] = 0; f[1] = 1;
for (int i = 2; i <= n; i++) {
    f[i] = ______;
}

解答:

递推公式是 f[i-1] + f[i-2]

练习题

完善程序练习

  1. 补全求最大值的代码:
123456int maxVal = a[0];
for (int i = 1; i < n; i++) {
    if (______) {
        maxVal = a[i];
    }
}
查看答案

答案:a[i] > maxVal

遍历数组,如果当前元素比已知最大值大,就更新最大值。

  1. 补全判断素数的代码:
1234567bool isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; ______; i++) {
        if (n % i == 0) return false;
    }
    return true;
}
查看答案

答案:i * i <= n

只需要检查到 sqrt(n) 即可,提高效率。

  1. 补全求阶乘的代码:
1234567long long factorial(int n) {
    long long result = 1;
    for (int i = 2; i <= n; i++) {
        ______;
    }
    return result;
}
查看答案

答案:result *= i

累乘计算阶乘。

  1. 补全字符串反转的代码:
123456789string reverse(string s) {
    int left = 0, right = ______;
    while (left < right) {
        swap(s[left], s[right]);
        left++;
        ______;
    }
    return s;
}
查看答案

答案:s.length() - 1、right--

双指针法反转字符串。

  1. 补全二分查找的代码:
12345678910int binarySearch(int a[], int n, int target) {
    int left = 0, right = n - 1;
    while (______) {
        int mid = left + (right - left) / 2;
        if (a[mid] == target) return mid;
        else if (a[mid] < target) ______;
        else ______;
    }
    return -1;
}
查看答案

答案:left <= right、left = mid + 1、right = mid - 1

二分查找的标准写法。

理论题

  1. 完善程序的关键是什么?
查看答案

完善程序的关键:

  1. 理解算法:弄清楚程序在做什么
  2. 分析逻辑:缺失部分在算法中的作用
  3. 看上下文:前后代码的逻辑关系
  4. 代入检验:用样例验证答案
  1. 排除法的步骤是什么?
查看答案

排除法步骤:

  1. 看上下文:分析前后代码逻辑
  2. 看变量:理解变量的含义和用途
  3. 看输出:明确期望的输出结果
  4. 代入选项:逐一验证每个选项
  5. 排除错误:排除明显错误的选项

易错点

⚠️ 注意:

  1. 先理解算法再做题
  2. 注意边界条件
  3. 代入样例验证
  4. 排除明显错误的选项