我有这个程序试图确定一些交叉集合中有多少个唯一项目。输入量完全取决于第一个值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;
}
答案 0 :(得分:4)
for (int i = 0; i < arr.size(); i+=2)
^
您想要i+=2
或i=i+2
,否则i
的值永远不会改变,从而导致无限循环。