Предмет: Информатика, автор: denbrativnyk

На мові програмування С/С++

Приложения:

NqVixer: Елементи вектора вводяться користувачем або заповнюються рандомно?
lozromanik: Тут треба заповнити як на малюнку
NqVixer: В примітці сказано що це саме індекси вектора, а про значення елементів по цим індексам не сказано
denbrativnyk: Немає значення випадково чи вводити, будь як

Ответы

Автор ответа: NqVixer
1

Ответ:

#include <iostream>

#include <iomanip> //для красивого виводу в консоль (setw)

#include <vector>

using namespace std;

int main()

{

   vector<int> b(81);

   for (int i = 0; i < b.size(); i++) b[i] = i + 1; //заповнення вектора

   const int rows{ 9 }, cols{ 9 };

   int arr[rows][cols]{};

   int counter = 0, i{}, j = -1;

   while (counter < rows * cols)

   {

       while (j < cols - 1 && !arr[i][j + 1]) //заповнення вправо

           arr[i][++j] = b[counter++];

       while (i < rows - 1 && !arr[i + 1][j]) //заповнення вниз

           arr[++i][j] = b[counter++];

       while (j > 0 && !arr[i][j - 1]) //заповнення вліво

           arr[i][--j] = b[counter++];

       while (i > 0 && !arr[i - 1][j]) //заповнення вверх

           arr[--i][j] = b[counter++];

   }

   for (int i = 0; i < rows; i++)

   {

       for (int j = 0; j < cols; j++) cout << setw(4) << arr[i][j];

       cout << endl;

   }

   return 0;

}

Объяснение:

на малюнку, до речі, помилка, два рази повторюється "55"


lozromanik: Можете пояснити, що означає !arr[i][j + 1] в циклах
NqVixer: Масив arr спочатку ініціалізований нулями (завдяки uniform ініціалізації {}). Фактично ця умова теж саме, що "поки елемент * в напрямку * не заповнений". Коли цикл проходиться вправо, перевіряємо чи залишилися порожні елементи праворуч (j + 1), коли вниз, чи залишилися порожні елементи знизу (i + 1) і т.д. Таким чином навіть якщо змінити розмір масиву, він буде заповнюватися правильно. (якщо питання було про форму запису !arr[i][j + 1], то це теж саме що arr[i][j + 1] != 0)
NqVixer: теж саме що arr[i][j + 1] == 0, вже сам заплутався)
lozromanik: друге, величезне спасибі, тут річ у тому, що С++ 0 та відмінне від 0 інтерпретує як брехню та істину
Интересные вопросы
Предмет: Русский язык, автор: Derns
Предмет: Химия, автор: 14danilk88