#4337. CSP 2023 入门级第一轮——寻找被移除的元素

CSP 2023 入门级第一轮——寻找被移除的元素

问题: 原有长度为 n+1 公差为 1 等差数列,将数列输到程序的数组时移除了一个元素,导致长度为 n 的连续数组可能不再连续,除非被移除的是第一个或最后一个元素。需要在数组不连续时,找出被移除的元素。试补全程序。

#include <iostream>
#include <vector>
using namespace std;
int find_missing(vector<int>& nums) {
    int left = 0, right = nums.size() - 1;
    while (left < right){
        int mid = left + (right - left) / 2;
        if (nums[mid] == mid + ①) {
            ②;
        } else {
            ③;
        }
    }
    return ④;
}
int main() {
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) cin >> nums[i];
    int missing_number = find_missing(nums);
    if (missing_number == ⑤) {
        cout << "Sequence is consecutive" << endl;
    }else{
        cout << "Missing number is " << missing_number << endl;
    }
    return 0;
}

{{ select(1) }} ①处应填什么?

  • 1
  • nums[0]
  • right
  • left

{{ select(2) }} ②处应填什么操作分?

  • left = mid + 1
  • right = mid - 1
  • right = mid
  • left = mid

{{ select(3) }} ③处应填什么操作?

  • left = mid + 1
  • right = mid - 1
  • right = mid
  • left = mid

{{ select(4) }} ④处应填什么?

  • left + nums[0]
  • right + nums[0]
  • mid + nums[0]
  • right + 1

{{ select(5) }} ⑤处应填什么值?

  • nums[0] + n
  • nums[0] + n - 1
  • nums[0] + n + 1
  • nums[n-1]