Как должен стрелять лучник, чтобы набрать ровно 100 очков? - C (СИ)
Формулировка задачи:
Привет, помогите пожалуйста написать программу, которая определяет как должен стрелять лучник, чтобы набрать ровно 100 очков?
Решение задачи: «Как должен стрелять лучник, чтобы набрать ровно 100 очков?»
textual
Листинг программы
#include <iostream> using namespace std; int m[] = { 40, 35, 27, 22, 19, 13 }, r[100/13+1], ms = sizeof(m)/ sizeof(m[0]); void show(int i) {for(int j=0; j<i; j++) cout<<r[j]<<' '; cout<<'\n';} void f(int s, int i) { if (s<0) return; else if (s==0) show(i); for(int j=0; j<ms; j++) {r[i]=m[j]; f(s-m[j], i+1);} } int main() {f(100,0);}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с консолью и для использования стандартного пространства имен std.
- Объявляем массив m типа int с пятью элементами и инициализируем его значениями 40, 35, 27, 22, 19.
- Объявляем массив r типа int размером 100/13+1 (13 - это размер массива m) и инициализируем все его элементы нулями.
- Объявляем переменную ms, которая хранит количество элементов в массиве m.
- Определяем функцию show, которая выводит на экран элементы массива r через пробел.
- Определяем функцию f, которая рекурсивно решает поставленную задачу. Если счётчик s меньше нуля, то функция завершается. Если счётчик s равен нулю, то функция вызывает функцию show для вывода результата на экран. В противном случае, в цикле изменяется значение r[i] на очередной элемент массива m, и функция вызывается рекурсивно для вычисления следующего элемента.
- В функции main вызывается функция f с аргументами 100 и 0, что инициирует процесс вычислений.
- Результатом работы программы будет вывод на экран всех возможных комбинаций элементов массива m, которые в сумме дают 100.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д