Заполнение матрицы змейкой - C (СИ)
Формулировка задачи:
Сколько мучался. Никак не могу понять как организовать заполнение массива таким образом.
Если кому нетрудно, хотя бы натолкните на мысль.
Решение задачи: «Заполнение матрицы змейкой»
textual
Листинг программы
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
int n;
cout << endl << "N=? (from 2 to 100): ";
cin >> n;
int mas[100][100];
for (int i = 0; i < n; i++)
{
for (int j = n-1; j > -1; j--)
{
if ((i + j) < n)
{
mas[i][j] = 0.5 * (i + j + 1) * (i + j + 2) +
((i + j) % 2 == 0 ? -j : -i);
}
else
{
int p = n - i - 1, q = n - j - 1;
mas[i][j] = n * n + 1 -
(0.5 * (p + q + 1) * (p + q + 2) +
((p + q) % 2 == 0 ? -q : -p));
}
cout << mas[i][j] << "\t";
}
cout << endl;
}
_getch();
return 0;
}
Объяснение кода листинга программы
- В начале программы пользователю предлагается ввести число N от 2 до 100, которое определяет размер матрицы.
- Затем определяется массив mas размером 100x100 для хранения заполненной матрицы.
- Далее происходит заполнение матрицы по определенному алгоритму:
- Внешний цикл for перебирает все строки матрицы от 0 до N-1.
- Внутренний цикл for перебирает все столбцы матрицы от N-1 до 0.
- Если сумма индексов текущей строки и столбца больше N-1, то значение элемента матрицы вычисляется как 0.5 (i + j + 1) (i + j + 2) + ((i + j) % 2 == 0 ? -j : -i).
- Если сумма индексов текущей строки и столбца равна N-1, то значение элемента матрицы вычисляется как nn+1 - (0.5 (p + q + 1) * (p + q + 2) + ((p + q) % 2 == 0 ? -q : -p)), где p = N-i-1, q = N-j-1.
- Значение элемента матрицы выводится на экран.
- После заполнения матрицы программа ожидает нажатия клавиши и завершается.