Задача о поворачивании колец из чисел - 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();
- }
Объяснение кода листинга программы
Код решает задачу сортировки массива поворотом колец. Список действий:
- Включаем необходимые заголовочные файлы:
iostream
- для работы с потоками ввода/выводаvector
- для работы с векторамиconio.h
- для работы с функциейgetch()
, которая используется для приостановки выполнения программы до нажатия клавишиlocale
- для установки локали (языка) вывода
- Определяем константы:
Rows
- количество строк (колец) в массивеcolums
- количество столбцов в массиве
- Инициализируем массив:
- Создаём одномерный массив
arr
размеромRows
наcolums
- Инициализируем его значениями, представленными в виде списка
- Создаём одномерный массив
- Находим сумму элементов массива:
- Функция
sum
принимает указатель на первый элемент массива, размер массива и номер элемента, с которого начинается суммирование - Суммируем все элементы массива, начиная с указанного
- Функция
- Проверяем на четность/нечетность суммы элементов:
- Функция
gen
рекурсивно вызывает себя для каждого кольца в массиве - Проверяет, является ли сумма элементов четной или нечетной
- Если сумма нечетная, то рекурсивно вызывается функция
gen
для следующего кольца - Если сумма четная, то рекурсивно вызывается функция
gen
для следующего кольца - Если сумма равна нулю, то текущее кольцо считается отсортированным
- Функция
- Выводим массив на экран:
- Функция
printArr
выводит значения массива на экран
- Функция
- Выводим отсортированный массив:
- После вызова функции
gen(0)
, массив будет отсортирован по возрастанию - Вызываем функцию
printArr
для вывода отсортированного массива
- После вызова функции
- Выводим сумму каждой четверки элементов:
- В функции
main
вычисляем сумму каждой четверки элементов и выводим её на экран
- В функции
- Останавливаем выполнение программы:
- Используем функцию
getch()
для приостановки выполнения программы до нажатия клавиши
- Используем функцию
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д