我有这个程序试图确定一些相交集中有多少独特的项目。输入的数量完全取决于第一个值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;
}