Заполнить матрицу по спирали - C (СИ)
Формулировка задачи:
Помогите заполнить матрицу по спирали, но нужно это сделать при помощи функции с заданным прототипом. Киньте хотя бы идеи как это можно сделать, пожалуйста.
Скрин задания
Решение задачи: «Заполнить матрицу по спирали»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <locale.h> #define NUM_ROWS 10 #define NUM_COLS 10 void matrix_spiral(int * mat, int n, int k); int main() { setlocale(LC_ALL, "Rus"); int mat[NUM_ROWS][NUM_COLS] = { 0 }, n, k; printf("Введите к-во элементво в строке, столбце:"); scanf_s("%d", &n); printf("Введите значение среднего элемента:"); scanf_s("%d", &k); matrix_spiral(mat[n], n, k); _getch(); return 0; } void matrix_spiral(int * mat, int n, int k) { int *p = NULL; int max_num = n*n + k - 1, num_el = n*n, num_now = 0, k_help = 0, i_help = 0, help_for_out = 0; printf("%d\n", n); printf("\n"); printf("\n"); while (num_now < num_el) { k_help++; for (int j = n - k_help; j >= k_help - 1; j--) { mat[j*n + i_help] = max_num--; num_now++; } if (num_now >= num_el) break; for (int j = k_help; j <= n - k_help; j++) { mat[n*i_help + j] = max_num--; num_now++; } if (num_now >= num_el) break; for (int j = k_help; j <= n - k_help; j++) { mat[j*n + n - k_help] = max_num--; num_now++; } if (num_now >= num_el) break; for (int j = n - k_help; j > k_help; j--) { mat[n*(n-k_help)+j-1] = max_num--; num_now++; } if (num_now >= num_el) break; i_help++; } for (p = &mat[0]; p < &mat[n*n]; p++) { printf(" %2d ", *p); help_for_out++; if (help_for_out == n) { help_for_out = 0; printf("\n"); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д