0

いくつかの交差するセット内にいくつの一意のアイテムがあるかを判断しようとしているこのプログラムがあります。入力の量は、最初の値に完全に依存し、nその後に入力されたセットの量に依存します。たとえば、最初に を入力するとn = 2、2 つの整数を入力する必要があります。次に、プログラムはnアイテム間にいくつの交差があるかを判断します (これは、アイテムから 2 つのアイテムを選択するようなnものです)。これはkインクリメントとして続きます。しかし、それは要点を超えています。いくつかの背景情報。

for私のプログラムは正しく適応し、適切な量の入力を受け入れますが、ループの外側にある最初のループの前に正しく動作しなくなりwhileます。私がやろうとしたことは、整数ベクトルのベクトルを作成し、1 行おきに追加することです (インデックスが 0 から始まり、インデックスが 1 から始まる場合)。しかし、ベクトルを間違って構築したと推測しています。ベクトル ロジックでエラーが発生することはありますか?

#include <iostream>
#include <vector>

using namespace std;

int fact (int m) {
        if (m <= 1)
        return 1;
    return m * fact(m - 1);
}

int comb (int n, int k) {
    return fact(n)/(fact(n-k)*fact(k));
}

int main() {
    int n = 0;
    int k = 2;
    int sum = 0;
    int diff = 0;
    int final = 0;

    vector <vector <int> > arr;
    cin >> n;
    while (n > 0) {
        vector <int> row;
        int u;
        for (int i = 0; i < n ; ++i) {
            cin >> u;
            row.push_back(u);
        }
        arr.push_back(row);
        n = comb(row.size(), k);
        k++;
    }
    for (int i = 0; i < arr.size(); i+2)
        for (int j = 0; j < arr[i].size(); ++j)
            sum += arr[i][j];

    for (int i = 1; i < arr.size(); i+2)
        for (int j = 0; j < arr[i].size(); ++j)
            diff += arr[i][j];

    final = sum - diff;
    cout << final;
    return 0;
}
4

1 に答える 1

4
for (int i = 0; i < arr.size(); i+=2)
                                  ^

i+=2またはを実行する必要がありi=i+2ます。そうしないと、の値がi変更されず、無限ループが発生します。

于 2013-02-04T06:00:12.333 に答える