Другие языки программирования и технологии

Как на Си написать программу, которая будет заполнять матрицу 5на5 следовательно как на картинке?

Пример программы есть, но нужна формула, что бы заполнить матрицу именно за этой картинкой.
Пример:
#include
void main()
{
const int n=7;
int Matrix[n][n];
int k=1;
int i, j;
for (i=n-1; i>=0; i--) {
for (j=0; j<n; j++) {
Matrix[i][j]=k;
k++;
}
}
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
printf("%2i ", Matrix[i][j]);
}
printf("\r\n");
}
}
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#define RANK 5
#define n (RANK - 1)
int main(void) {
int matrix[RANK][RANK] = { 0 }, row = n, col = 0, step = 1;
if (RANK % 2 == 0) exit(0);
matrix[row][col] = step;
while (true) {
if (col == 0 && row != 0)
if (row & 1) while (row < n && col < n) matrix[++row][++col] = ++step;
else matrix[--row][col] = ++step;
else if (row == 0)
if (col & 1) while (row < n && col < n) matrix[++row][++col] = ++step;
else matrix[row][++col] = ++step;
else if (col == n && row != n)
if (row & 1) matrix[--row][col] = ++step;
else while (row > 0) matrix[--row][--col] = ++step;
else if (row == n)
if (col & 1) matrix[row][++col] = ++step;
else while (row > 0 && col > 0) matrix[--row][--col] = ++step;
if (row == 0 && col == n) break;
}
for (row = 0; row != RANK; ++row, printf("\n\n"))
for (col = 0; col != RANK; ++col)
printf("%4i", matrix[row][col]);
system("pause");
return 0;
}
Василий Чаплай
Василий Чаплай
81 578
Лучший ответ
Вижу здесь закономерности
- движение вверх чередуется 3мя последовательными направлениями : вертикально вверх на 1 строку, влево наискосок до 1го столбца, горизонтально вправо на 1 столбец
- направления меняются после прохождения главной диагонали {1,1} на вправо по горизонтали на 1 столбец, вниз наискосок до последнего столбца, вертикально вверх на 1 строку
- начало {1,n}, конец {n,1}
ЗЫ чем могу...
Каким боком здесь "пример" кому поможет, не понимаю.

Похожие вопросы