[英]Why is the code after my for loop being ignored?
我認為你不需要知道問題的背景來回答這個問題,但我會給出它以防萬一。
- 在過去的 N 周中,我們測量了每天的降雨量,並記錄了一周中的每一天。 返回無雨天數最多的兩周期間的第一周數。
代碼沒有給出警告或錯誤,如果我嘗試在第二個 for 循環內打印dryestweeks
,那么它會返回正確的答案。 然而,第二個 for 循環之后的所有代碼似乎都被忽略了,我得到Process returned -1073741819 (0xC0000005)
。 問題必須出在第二個 for 循環中,因為如果我將其注釋掉,那么“test2”和dryestweeks
都會打印出來,並且程序返回 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[week],然后第二個循環從 [0, week[ 開始,但是您正在使用 v[i+1] 檢索下一周。 我不知道你到底想達到什么目的,但如果你這樣做了
for (int i=0;i<weeks-1;i++)
{
...
}
它正確執行。
對於給定的輸入示例,在第二個循環的最后一次迭代 ( i = 5
) 中,索引i + 1
(=6) 將超出v[i + 1]
( v
合法索引將來自0 到 5)。
第二個循環比所需的多迭代一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.