C++ 向量初始化产生意外输出
C++ vector initialization produces unexpected output
我有以下代码:
#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]
而不是效果很好。
我认为问题可能出在使用花括号进行初始化?
旁注:我正在尝试解决这个问题problem
试试这个。应该给出最左边的目标数。
#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]);
}
}
}
}
我有以下代码:
#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]
而不是效果很好。
我认为问题可能出在使用花括号进行初始化?
旁注:我正在尝试解决这个问题problem
试试这个。应该给出最左边的目标数。
#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]);
}
}
}
}