Задача о поворачивании колец из чисел - 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()
для приостановки выполнения программы до нажатия клавиши
- Используем функцию
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д