为什么我的 for 循环之后的代码被忽略了?
Why is the code after my for loop being ignored?
我不认为你需要知道问题的背景来回答这个问题,但我会给出它以防万一。
-In the past N weeks, we've measured the amount of rainfall every day, and noted it down for each day of the week. Return the number of the first week of the two week period where there were the most days without rain.
代码没有给出警告或错误,如果我尝试在 第二个 for 循环中打印 dryestweeks
,那么它 returns 是正确的答案.但是,第二个 for 循环之后的所有代码似乎都被忽略了,我得到 Process returned -1073741819 (0xC0000005)
。问题必须出在第二个 for 循环中,因为如果我将其注释掉,则会打印“test2”和 dryestweeks
,程序 returns 0.
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int main() {
int weeks;
cin >> weeks;
vector<int> v[weeks];
for (int i = 0;i < weeks; i++) {
int a, b, c, d, e, f, g;
cin >> a >> b >> c >> d >> e >> f >> g;
v[i].push_back(a);
v[i].push_back(b);
v[i].push_back(c);
v[i].push_back(d);
v[i].push_back(e);
v[i].push_back(f);
v[i].push_back(g);
}
int mostdrydays = 0;
int dryestweeks = 0;
for (int i = 0; i < weeks; i++) {
int weeklydrydays = count(v[i].begin(), v[i].end(), 0);
int nextweekdrydays = count(v[i+1].begin(), v[i+1].end(), 0);
int biweeklydrydays=weeklydrydays+nextweekdrydays;
if (biweeklydrydays > mostdrydays) {
mostdrydays = biweeklydrydays;
dryestweeks = i + 1;
}
}
cout << "test2" << endl;
cout << dryestweeks << endl;
return 0;
}
输入示例为:
6
5 10 15 20 25 30 35
0 2 0 0 0 0 0
0 0 0 1 0 3 0
0 1 2 3 4 5 6
5 1 0 0 2 1 0
0 0 0 0 0 0 0
程序应使用上述输入打印“2”。
第二个循环溢出。
您首先定义了 v[weeks]
,然后第二个循环从 [0, weeks[
开始,但您正在使用 v[i + 1]
检索下周。我不知道你到底想达到什么目的,但如果你做到了
for(int i = 0; i < weeks - 1; i++)
{
...
}
它正确执行。
对于给定的输入示例,在第二个循环的最后一次迭代 (i = 5
) 中,索引 i + 1
(=6) 将超出 v[i + 1]
的界限(v
的合法索引将从 0 到 5)。
第二个循环的迭代次数比要求的多。
我不认为你需要知道问题的背景来回答这个问题,但我会给出它以防万一。
-In the past N weeks, we've measured the amount of rainfall every day, and noted it down for each day of the week. Return the number of the first week of the two week period where there were the most days without rain.
代码没有给出警告或错误,如果我尝试在 第二个 for 循环中打印 dryestweeks
,那么它 returns 是正确的答案.但是,第二个 for 循环之后的所有代码似乎都被忽略了,我得到 Process returned -1073741819 (0xC0000005)
。问题必须出在第二个 for 循环中,因为如果我将其注释掉,则会打印“test2”和 dryestweeks
,程序 returns 0.
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int main() {
int weeks;
cin >> weeks;
vector<int> v[weeks];
for (int i = 0;i < weeks; i++) {
int a, b, c, d, e, f, g;
cin >> a >> b >> c >> d >> e >> f >> g;
v[i].push_back(a);
v[i].push_back(b);
v[i].push_back(c);
v[i].push_back(d);
v[i].push_back(e);
v[i].push_back(f);
v[i].push_back(g);
}
int mostdrydays = 0;
int dryestweeks = 0;
for (int i = 0; i < weeks; i++) {
int weeklydrydays = count(v[i].begin(), v[i].end(), 0);
int nextweekdrydays = count(v[i+1].begin(), v[i+1].end(), 0);
int biweeklydrydays=weeklydrydays+nextweekdrydays;
if (biweeklydrydays > mostdrydays) {
mostdrydays = biweeklydrydays;
dryestweeks = i + 1;
}
}
cout << "test2" << endl;
cout << dryestweeks << endl;
return 0;
}
输入示例为:
6
5 10 15 20 25 30 35
0 2 0 0 0 0 0
0 0 0 1 0 3 0
0 1 2 3 4 5 6
5 1 0 0 2 1 0
0 0 0 0 0 0 0
程序应使用上述输入打印“2”。
第二个循环溢出。
您首先定义了 v[weeks]
,然后第二个循环从 [0, weeks[
开始,但您正在使用 v[i + 1]
检索下周。我不知道你到底想达到什么目的,但如果你做到了
for(int i = 0; i < weeks - 1; i++)
{
...
}
它正确执行。
对于给定的输入示例,在第二个循环的最后一次迭代 (i = 5
) 中,索引 i + 1
(=6) 将超出 v[i + 1]
的界限(v
的合法索引将从 0 到 5)。
第二个循环的迭代次数比要求的多。