Как правильно добавить и получить доступ к элементам многомерного вектора с помощью циклов?

У меня есть эта программа, которая пытается определить, сколько уникальных предметов находится в некоторых пересекающихся наборах. Количество ввода полностью зависит от первого значения 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;
}

0

Решение

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

Ты хочешь сделать i+=2 или же i=i+2иначе значение i никогда не изменяется, что приводит к бесконечному циклу.

4

Другие решения

Других решений пока нет …