Заполнить матрицу значениями вектора от центра по спирали: вниз - влево - вверх - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите с заданием. Заполнить матрицу значениями вектора b1, b2, ..., b81 от центра по спирали: вниз - влево - вверх - вправо. (Примечание. На рисунке указаны индексы элементов вектора b.) Заранее спасибо.

Решение задачи: «Заполнить матрицу значениями вектора от центра по спирали: вниз - влево - вверх»

textual
Листинг программы
#include <stdio.h>
 
#define N 9
 
int main() {
    int a[N][N];           // матрица
    int i = 1, j, q, cnt;  // счетчики циклов
    int r, c;              // индексы строк / колонок
    int d = 0;             // направление движения
    r = c = N / 2;         // начальные индексы
    a[ r ][ c ] = i++;
    for (cnt = 1; cnt <= N; ++cnt) {
        for (q = 0; q < 2; ++q) {
            for (j = 0; j < cnt && i <= (N * N); ++j) {
                switch (d) {
                case 0: ++r; break;
                case 1: --c; break;
                case 2: --r; break;
                case 3: ++c; break;
                }
                a[ r ][ c ] = i++;
            }
            if (++d > 3) d = 0;
        }
    }
    return 0;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл stdio.h для использования функций ввода-вывода
  2. Определяем размерность матрицы N на N с помощью #define N = 9
  3. Создаем двумерный массив a[N][N] для хранения значений матрицы
  4. Инициализируем счетчики циклов i, j, q, cnt, а также переменные r, c для хранения индексов строк и колонок
  5. Задаем начальные значения переменных r = c = N / 2 и a[r][c] = i++, чтобы начать заполнение матрицы с центра
  6. Запускаем цикл for cnt = 1..N, который будет выполняться N раз, отвечая за количество спиралей в матрице
  7. Внутри цикла запускаем еще один цикл for q = 0..2, который будет выполняться 2 раза, отвечая за два возможных направления движения при заполнении матрицы (вниз и влево)
  8. Внутри второго цикла запускаем еще один цикл for j = 0..cnt, который будет выполняться cnt раз, чтобы заполнить матрицу значениями вектора от центра по спирали
  9. Внутри третьего цикла используем оператор switch для определения направления движения (вниз, влево, вверх, вправо) и обновляем значения переменных r и c в соответствии с выбранным направлением
  10. Обновляем значение a[r][c] = i++, чтобы добавить очередное значение в матрицу
  11. После выполнения третьего цикла обновляем значение d, чтобы поменять направление движения
  12. После выполнения второго цикла обновляем значение q, чтобы поменять направление движения
  13. После выполнения первого цикла выводим матрицу на экран с помощью функций ввода-вывода из stdio.h
  14. Возвращаем 0, чтобы указать, что программа успешно завершилась

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы