いくつかの交差するセット内にいくつの一意のアイテムがあるかを判断しようとしているこのプログラムがあります。入力の量は、最初の値に完全に依存し、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;
}