找到 375 道单选题
EXY-SC-0195
第 181 题

下面代码实现了对两个数组表示的正整数的高精度加法(数组低位在前),则横线上应填写( )。

vector<int> add(vector<int> a, vector<int> b) {
    vector<int> c;
    int carry = 0;
 
    for (int i = 0; i < a.size() || i < b.size(); i++) {
        if (i < a.size()) carry += a[i];
        if (i < b.size()) carry += b[i];
        _________________________  // 在此处填入代码
    }
    if (carry) c.push_back(carry);
 
    return c;
}
A
c.push_back(carry / 10);
carry %= 10;
B
c.push_back(carry % 10);
carry /= 10;
C
c.push_back(carry % 10);
D
c.push_back(carry);
carry /= 10;
语言: C++
GESP真题 五级
2025.12
单选题号: 15
EXY-SC-0194
第 182 题

给定有 n 个任务,每个任务有截止时间和利润,每个任务耗时 1 个时间单位、必须在截止时间前完成,且每个时间槽最多做 1 个任务。为了在规定时间内获得最大利润,可以采用贪心策略,即按利润从高到低排序,尽量安排,则横线处应填写( )。

struct Task {
    int deadline;  // 截止时间
    int profit;    // 利润
};
 
void sortByProfit(vector<Task>& tasks) {
    sort(tasks.begin(), tasks.end(),
        [](const Task& a, const Task& b) {
            return a.profit > b.profit;
        });
}
 
int maxProfit(vector<Task>& tasks) {
    sortByProfit(tasks);
 
    int maxTime = 0;
    for (auto& t : tasks) {
        maxTime = max(maxTime, t.deadline);
    }
 
    vector<bool> slot(maxTime + 1, false);
    int totalProfit = 0;
 
    for (auto& task : tasks) {
        for (int t = task.deadline; t >= 1; t--) {
            if (!slot[t]) {
                __________________  // 在此处填入代码
                break;
            }
        }
    }
 
    return totalProfit;
}
A
slot[t] = true;
totalProfit += task.profit;
B
slot[t] = false;
totalProfit += task.profit;
C
slot[t] = true;
totalProfit = task.profit;
D
slot[t] = false;
totalProfit = task.profit;
语言: C++
GESP真题 五级
2025.12
单选题号: 14
EXY-SC-0193
第 183 题

下面给出了阶乘计算的两种方式。以下说法正确的是( )。

int factorial1(int n) {
    if (n <= 1) return 1;
    return n * factorial1(n - 1);
}
 
int factorial2(int n) {
    int acc = 1;
    while (n > 1) {
        acc = n * acc;
        n = n - 1;
    }
    return acc;
}
A

上面两种实现方式的时间复杂度相同,都为 O(n)

B

上面两种实现方式的空间复杂度相同,都为 O(n)

C

上面两种实现方式的空间复杂度相同,都为 O(1)

D

函数 factorial1() 的时间复杂度为 $O(2^n)$,函数 factorial2() 的时间复杂度为 $O(n)$

语言: C++
GESP真题 五级
2025.12
单选题号: 13
EXY-SC-0192
第 184 题

小杨要把一根长度为 L 的木头切成 K 段,使得每段长度小于等于 x。已知每切一刀只能把一段木头分成两段,他用二分法找到满足条件的最小 x(x 为正整数),则横线处应填写( )。

// 判断:在不超过 K 次切割内,是否能让每段长度 <= x
bool check(int L, int K, int x) {
    int cuts = (L - 1) / x;
    return cuts <= K;
}
 
// 二分查找最小可行的 x
int binary_cut(int L, int K) {
    int l = 1, r = L;
    while (l < r) {
        int mid = l + (r - l) / 2;
        __________________  // 在此处填入代码
    }
    return l;
}
 
int main() {
    int L = 10;  // 木头长度
    int K = 2;   // 最多切 K 刀
 
    cout << binary_cut(L, K) << endl;
    return 0;
}
A
if (check(L, K, mid))
    r = mid;
else
    l = mid + 1;
B
if (check(L, K, mid))
    r = mid+1;
else
    l = mid + 1;
C
if (check(L, K, mid))
    r = mid + 1;
else
    l = mid - 1;
D
if (check(L, K, mid))
    r = mid + 1;
else
    l = mid;
语言: C++
GESP真题 五级
2025.12
单选题号: 12
EXY-SC-0191
第 185 题

下面代码尝试在有序数组中查找第一个大于等于 x 的元素位置。如果没有大于等于 x 的元素,返回 arr.size()。以下说法正确的是( )。

int lower_bound(vector<int>& arr, int x) {
    int l = 0, r = arr.size();
    while(l < r) {
        int mid = l + (r - l) / 2;
        if(arr[mid] >= x) r = mid;
        else l = mid + 1;
    }
    return l;
}
A

上述代码逻辑正确

B

上述代码逻辑错误,while 循环条件应该用 l <= r

C

上述代码逻辑错误,mid 计算错误

D

上述代码逻辑错误,边界条件不对

语言: C++
GESP真题 五级
2025.12
单选题号: 11
当前页显示 181 - 185 ,共 375 道单选题