0

我有这个程序试图确定一些相交集中有多少独特的项目。输入的数量完全取决于第一个值n,然后是之后输入的集合数量。例如,如果我从 enter 开始n = 2,我应该输入 2 个整数。然后程序确定项目之间有多少交叉点n(这就像从项目中选择 2 个n项目)。这以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;
}
4

1 回答 1

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

你想做i+=2or i=i+2,否则 的值i永远不会改变,导致无限循环。

于 2013-02-04T06:00:12.333 回答