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

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

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

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

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

textual
Листинг программы
#include <iostream>
#include <vector>
#include <conio.h>
#include <locale>
 
using namespace std;
 
const int Rows = 4;
const int colums = 12;
 
int arr[Rows][colums] = {
    { 3, 9, 6, 4, 3, 7, 5, 2, 4, 8, 3, 6 },
    { 8, 4, 7, 5, 8, 2, 9, 5, 5, 8, 4, 6 },
    { 6, 5, 8, 1, 6, 6, 7, 1, 3, 7, 1, 9 },
    { 9, 2, 4, 6, 8, 4, 3, 8, 5, 2, 3, 7 }
};
 
void lshift(int *beg, int n)
{
    int temp = *beg;
    ++beg;
    --n;
    while (n--)
    {
        *(beg - 1) = *beg;
        ++beg;
    }
    *(beg - 1) = temp;
}
 
int sum(int *beg, int n, int m)
{
    int s = 0;
    for (int i = 0; i < n; i++, beg += m)
    {
        s += *beg;
    }
    return s;
}
 
void printArr()
{
    for (int i = 0; i < Rows; i++)
    {
        for (int j = 0; j < colums; j++)
        {
            cout << arr[i][j] << ' ';
        }
        cout << endl;
    }
}
 
int gen(int i)
{
    int s = sum(&arr[0][0], Rows, colums);
    if (i >= Rows) return 0;
    for (int j = 1; j < colums; j++)
    {
        if (s != sum(&arr[0][j], Rows, colums))
        {
            s = 0;
            break;
        }
    }
 
    if (s != 0)
    {
        return s;
    }
 
    for (int j = 0; j < colums; j++)
    {
        lshift(arr[i], colums);
        s = gen(i + 1);
        if(s != 0) return s;
    }
    return 0;
}
 
 
int main()
{
    setlocale(LC_ALL, "ukr");
    int i ,j;
 
    cout <<"Несортирований массив\n";
for (int i = 0; i < Rows; i++)
    {
        for (int j = 0; j < colums; j++)
        {
            cout <<arr[i][j]<< ' ';
        }
        cout << endl;
    }
    cout <<"\n";
    cout <<"Сортированный массив\n";
    int s = gen(0);
    printArr();
    cout << "\nСумма каждой четвёрки елементов  = "<< s;
    getch();
}

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

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

  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
Похожие ответы