Задача о поворачивании колец из чисел - C (СИ)

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

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

Поверните четыре кольца так, что бы суммы каждой четверки чисел, которые расположены вдоль одного радиуса, были одинаковыми. Чему они равны? Народ хэлпуйте!

Решение задачи: «Задача о поворачивании колец из чисел»

textual
Листинг программы
  1. #include <iostream>
  2. #include <vector>
  3. #include <conio.h>
  4. #include <locale>
  5.  
  6. using namespace std;
  7.  
  8. const int Rows = 4;
  9. const int colums = 12;
  10.  
  11. int arr[Rows][colums] = {
  12.     { 3, 9, 6, 4, 3, 7, 5, 2, 4, 8, 3, 6 },
  13.     { 8, 4, 7, 5, 8, 2, 9, 5, 5, 8, 4, 6 },
  14.     { 6, 5, 8, 1, 6, 6, 7, 1, 3, 7, 1, 9 },
  15.     { 9, 2, 4, 6, 8, 4, 3, 8, 5, 2, 3, 7 }
  16. };
  17.  
  18. void lshift(int *beg, int n)
  19. {
  20.     int temp = *beg;
  21.     ++beg;
  22.     --n;
  23.     while (n--)
  24.     {
  25.         *(beg - 1) = *beg;
  26.         ++beg;
  27.     }
  28.     *(beg - 1) = temp;
  29. }
  30.  
  31. int sum(int *beg, int n, int m)
  32. {
  33.     int s = 0;
  34.     for (int i = 0; i < n; i++, beg += m)
  35.     {
  36.         s += *beg;
  37.     }
  38.     return s;
  39. }
  40.  
  41. void printArr()
  42. {
  43.     for (int i = 0; i < Rows; i++)
  44.     {
  45.         for (int j = 0; j < colums; j++)
  46.         {
  47.             cout << arr[i][j] << ' ';
  48.         }
  49.         cout << endl;
  50.     }
  51. }
  52.  
  53. int gen(int i)
  54. {
  55.     int s = sum(&arr[0][0], Rows, colums);
  56.     if (i >= Rows) return 0;
  57.     for (int j = 1; j < colums; j++)
  58.     {
  59.         if (s != sum(&arr[0][j], Rows, colums))
  60.         {
  61.             s = 0;
  62.             break;
  63.         }
  64.     }
  65.  
  66.     if (s != 0)
  67.     {
  68.         return s;
  69.     }
  70.  
  71.     for (int j = 0; j < colums; j++)
  72.     {
  73.         lshift(arr[i], colums);
  74.         s = gen(i + 1);
  75.         if(s != 0) return s;
  76.     }
  77.     return 0;
  78. }
  79.  
  80.  
  81. int main()
  82. {
  83.     setlocale(LC_ALL, "ukr");
  84.     int i ,j;
  85.  
  86.     cout <<"Несортирований массив\n";
  87. for (int i = 0; i < Rows; i++)
  88.     {
  89.         for (int j = 0; j < colums; j++)
  90.         {
  91.             cout <<arr[i][j]<< ' ';
  92.         }
  93.         cout << endl;
  94.     }
  95.     cout <<"\n";
  96.     cout <<"Сортированный массив\n";
  97.     int s = gen(0);
  98.     printArr();
  99.     cout << "\nСумма каждой четвёрки елементов  = "<< s;
  100.     getch();
  101. }

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

Код решает задачу сортировки массива поворотом колец. Список действий:

  1. Включаем необходимые заголовочные файлы:
    • iostream - для работы с потоками ввода/вывода
    • vector - для работы с векторами
    • conio.h - для работы с функцией getch(), которая используется для приостановки выполнения программы до нажатия клавиши
    • locale - для установки локали (языка) вывода
  2. Определяем константы:
    • Rows - количество строк (колец) в массиве
    • colums - количество столбцов в массиве
  3. Инициализируем массив:
    • Создаём одномерный массив arr размером Rows на colums
    • Инициализируем его значениями, представленными в виде списка
  4. Находим сумму элементов массива:
    • Функция sum принимает указатель на первый элемент массива, размер массива и номер элемента, с которого начинается суммирование
    • Суммируем все элементы массива, начиная с указанного
  5. Проверяем на четность/нечетность суммы элементов:
    • Функция gen рекурсивно вызывает себя для каждого кольца в массиве
    • Проверяет, является ли сумма элементов четной или нечетной
    • Если сумма нечетная, то рекурсивно вызывается функция gen для следующего кольца
    • Если сумма четная, то рекурсивно вызывается функция gen для следующего кольца
    • Если сумма равна нулю, то текущее кольцо считается отсортированным
  6. Выводим массив на экран:
    • Функция printArr выводит значения массива на экран
  7. Выводим отсортированный массив:
    • После вызова функции gen(0), массив будет отсортирован по возрастанию
    • Вызываем функцию printArr для вывода отсортированного массива
  8. Выводим сумму каждой четверки элементов:
    • В функции main вычисляем сумму каждой четверки элементов и выводим её на экран
  9. Останавливаем выполнение программы:
    • Используем функцию getch() для приостановки выполнения программы до нажатия клавиши

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы