C++ 向量初始化产生意外输出

时间:2021-05-24 21:38:14

标签: c++ vector initialization

我有以下代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> nums = {2, 3, 4, 5};
    sort(nums.begin(), nums.end());
    int target = 20;
    int N = nums.size();
    int clo = 1e9;
    vector<int> res(3);
    for (int i = 0; i < N; i ++) {
        for (int j = i + 1; j < N; j ++) {
            int t = target - nums[i] - nums[j];
            int l = j + 1, r = N - 1;
            while (l <= r) {
                int m = (l + r) / 2;
                if (nums[m] <= t) {
                    l = m + 1;
                }
                else r = m - 1;
            }
            int dif = abs(target - nums[i] - nums[j] - nums[l]);
            if (dif < clo) {
                clo = dif;
                res = {nums[i], nums[j], nums[l]};
                printf("%d %d %d-------", nums[i], nums[j], nums[l]);
                printf("%d %d %d\n", res[0], res[1], res[2]);
            }
        }
    }
}

特别是这两行

printf("%d %d %d-------", nums[i], nums[j], nums[l]);
printf("%d %d %d\n", res[0], res[1], res[2]);

在某些迭代中产生不同的输出

为什么会这样?

我试过用 res[0] = nums[i], res[1] = nums[j], res[2] = nums[l] 代替它,但效果很好。

我认为问题可能是使用花括号初始化?

旁注:我正在尝试解决这个问题 serial

1 个答案:

答案 0 :(得分:2)

试试这个。应该给出最左边的目标数字。

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> nums = {2, 3, 4, 5};
    sort(nums.begin(), nums.end());
    int target = 20;
    int N = nums.size();
    int clo = 1e9;
    vector<int> res(3);
    for (int i = 0; i < N; i ++) {
        for (int j = i + 1; j < N; j ++) {
            int t = target - nums[i] - nums[j];
            int l = j + 1, r = N;
            while (l < r) {
                int m = (l + r) / 2;
                if (t > nums[m]) {
                    l = m + 1;
                }
                else r = m;
            }
            int dif = abs(target - nums[i] - nums[j] - nums[l]);
            if (dif < clo) {
                clo = dif;
                res = {nums[i], nums[j], nums[l]};
                printf("%d %d %d-------", nums[i], nums[j], nums[l]);
                printf("%d %d %d\n", res[0], res[1], res[2]);
            }
        }
    }
}
相关问题