Сделать я это хотела так: создать пустой двумерный вектор, затем в цикле вводить построчно массив, проверять сумму его элементов: если она кратна У, то сначала в двумерный добавить строку Х, а потом, что было введено с клавиатуры; иначе — просто добавить что было введено с клавиатуры. Вроде выглядит здраво, но вылетает окно с ошибкой. Помогите, пожалуйста, разобраться.
#include <string>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n, y, x ;
cout << "n = ";
cin >> n;
cout << endl << " y = ";
cin >> y;
vector< vector<int> > matrix;
vector <int> dop;
vector<int> row;
cout << "Строка: " << endl;
for (int i = 0; i < n; i++)
{
cin >> x;
dop.push_back(x);
}
cout << "Массив: " << endl;
int line, sum, fl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
sum = 0;
cin >> line;
row.push_back(line);
for (int k = 0; k < n; k++)
sum += row[k];
if (sum % y == 0)
fl = 1;
if (fl) {
matrix.push_back(dop);
matrix.push_back(row);
row.clear();
}
else {matrix.push_back(row);
row.clear();}
}
}
system("pause");
return 0;
}
как-то вы усложнили все
определяйте переменные только в той области, где они вам реально нужны
не избегайте комментариев - они потом помогут
не делайте лишнего функционала
код:
// получить размер матрицы
int n;
cout << "n = ";
cin >> n;
// получить число Y (для проверки кратности)
int y;
cout << endl << " y = ";
cin >> y;
// получить строку, которая будет вставляться в матрицу
vector <int> dop;
cout << "Строка: " << endl;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
dop.push_back(x);
}
// сформировать матрицу
vector< vector<int> > matrix;
cout << "Массив: " << endl;
// пройтись по всем строкам
for (int i = 0; i < n; i++) {
vector<int> row;
int sum = 0;
// пройтись по всем столбцах
for (int j = 0; j < n; j++) {
// ввести строку матрицы
int line
cin >> line;
row.push_back(line);
// подсчитать сумму ее элементов
sum += line;
}
// если сумма кратно Y - добавить заданную ранее строку и текущую строку в матрицу
if (sum % y == 0)
matrix.push_back(dop);
// добавить текущий ряд
matrix.push_back(row);
}
Ошибки в вашем коде были следующие:
for (int j = 0; j < n; j++) {
sum = 0;
cin >> line;
row.push_back(line);
for (int k = 0; k < n; k++)
sum += row[k];
if (sum % y == 0)
fl = 1;
т.е. вы в цикле заполняли массив row
, тут все ОК, но вы в этом же цикле уже считали сумму всех элементов массива row
(от 0
до n
), но вы еще не заполнили массив полностью!!!
т.е. минимум вам надо было делать так:
for (int j = 0; j < n; j++) {
cin >> line;
row.push_back(line);
}
sum = 0;
for (int k = 0; k < n; k++)
sum += row[k];
if (sum % y == 0)
fl = 1;
и конечно проверять кратность суммы тоже надо было вне циклов (выше я это показал)
В общем:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Как можно заменить все boost::bind на лямбды в коде ниже??? Почему при попытке в функции accept заменить boost::bind на std::bind, компилятор выдает ошибку No matching...
Какого типа данных возвращаемое значение boost::bind? Я хочу сделать функцию, которая будет принимать в себя результат работы boost::bind, но я не знаю...
Нужно создать файлы cookie на сайте, я использую slim 3 и cookie создаётся в контроллереЯ уже пробовал создавать так: