无法在windows控制台中为C++程序提供必要的输入

Cannot give necessary input to C++ program in windows console

本文关键字:输入 程序 C++ windows 控制台      更新时间:2023-10-16

我正在尝试解决CSES问题集:公寓,它在3行中有这样的输入,但我无法在Windows终端中处理/通过所有三行。我正在使用Geany编辑器,编译是成功的。

10 10 0
37 62 56 69 34 46 10 86 16 49
50 95 47 43 9 62 83 71 71 7

有人能回顾一下并告诉我出了什么问题吗?我的逻辑有错吗?

#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int main()
{
vector<int> v1;
vector<int> v2;
vector<bool> allotted(n, false);
cin >> n >> m >> k;
for (int i = 0; i < n; ++i) {
cin >> v1[i];
}
for (int j = 0; j < m; ++j) {
cin >> v2[j];
}
sort(v2.begin(), v2.end());
sort(v1.begin(), v1.end());
int ans = 0;
for (int req = 0; req < n; ++req) {
for (int x = -k; x <= k; ++x) {
if (find(v2.begin(), v2.end(), v1[req]+x) != v2.end() && alloted[req] == false) {
++ans;
allotted[req] = 1;
}
else {
continue;
}
}
}
cout << ans;
return 0;
}

输出:

10 10 10 037 62 56 69 34 46 10 86 16 49------------------(程序退出,代码为:-103741819(

访问元素或通过push_back添加元素之前,必须先分配元素。

要分配元素,使用resize()是一种很好的方法。

vector<int> v1;
vector<int> v2;
vector<bool> allotted(n, false); // note that n is zero here!
cin>>n>>m>>k; // after here, the size will be n (may not when the reading fails)
// allocate elements
v1.resize(n);
v2.resize(m);
allotted.resize(n);

您忘记告诉向量应该有多长。因此,您正在将数据读取到不存在的变量中。

作为MikeCAT答案的替代方案,如果您推迟向量的声明,直到您知道它们需要多大,那么您就可以以正确的大小创建它们。

cin>>n>>m>>k;
vector<int> v1(n); // v1 has size n
vector<int> v2(m); // v2 has size m
vector<bool> allotted(n, false); // allotted has size n