У меня есть эта программа, которая пытается определить, сколько уникальных предметов находится в некоторых пересекающихся наборах. Количество ввода полностью зависит от первого значения n
, а затем количество наборов, введенных после. Например, если я начну с ввода 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;
}
for (int i = 0; i < arr.size(); i+=2)
^
Ты хочешь сделать i+=2
или же i=i+2
иначе значение i
никогда не изменяется, что приводит к бесконечному циклу.
Других решений пока нет …