如何使用循环正确地向多维向量添加和访问项?

时间:2013-02-04 05:56:13

标签: c++ combinatorics multidimensional-array

我有这个程序试图确定一些交叉集合中有多少个唯一项目。输入量完全取决于第一个值n,然后取决于之后输入的集合数量。例如,如果我从输入n = 2开始,我应该输入2个整数。然后,程序确定n项之间有多少交叉点(这就像从n项中选择2项)。这将以k增量继续。但这有点超越了。只是一些背景信息。

我的程序正确调整并接受适当的输入量,但它在for循环之外的第一个while循环之前停止正常工作。我试图做的是制作一个整数向量的向量,然后添加每隔一行(当索引从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;
}

1 个答案:

答案 0 :(得分:4)

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

您想要i+=2i=i+2,否则i的值永远不会改变,从而导致无限循环。