簡體   English   中英

為什么我的 for 循環后的代碼被忽略?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM