Ваша задача — заполнить двумерный массив из NN строк и NN столбцов следующим образом: первая строка является упорядоченным набором чисел от 1 до NN, каждая следующая является цикличным сдвигом влево предыдущей строки.
В чем именно проблема? Что получилось, что не получилось?
Оказывается это наша задача, а не задача для ТС ))
Кто прочел, для того и задача ))
Добрый день, мне помогли решить задачу, но я не понимаю как работает эта строка: arr[i][j] = (i + j) % n + 1;
и можно по-другому решить?
#include <iostream>
using namespace std;
int main() {
int n, m = 0;
cin >> n;
int arr[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = (i + j) % n + 1;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << arr[i][j] << " ";
}
cout << endl; }
}
Присваивает в ячейку массива то число, что вычислено справа )
Видимо так получается тот сдвиг, о котором просили. %
это остаток от деления.
Непонятно зачем ввод если просят не самому вводить, а
Можно. Ваша задача решалась три года назад тремя способами
Первый
#include <iostream>
int** matrix_fill(size_t N);
void matrix_free(int** mat, size_t N);
int main(void){
size_t N = 6;
int** mat = matrix_fill(N);
for(size_t i = 0; i < N; ++i){
for(size_t j = 0; j < N; ++j)
std::cout << mat[i][j] << ' ';
std::cout << std::endl;
}
matrix_free(mat, N);
std::cin.get();
return 0;
}
//заполнение по заданию
int** matrix_fill(size_t N){
int** mat = new int*[N];
for(size_t i = 0; i < N; ++i){
mat[i] = new int[N];
for(size_t j = 0; j < N; ++j)
mat[i][j] = (i + j) % N + 1;
}
return mat;
}
//удаление
void matrix_free(int** mat, size_t N){
for(size_t i = 0; i < N; ++i)
delete[] mat[i];
delete[] mat;
}
Источник: Сдвиг двумерного массива влево
Спасибо всем за помощь!