0 / 0 / 0
Регистрация: 07.10.2017
Сообщений: 4
|
||||||
1 | ||||||
Получение одного числа из другого с помощью арифметических операций07.10.2017, 16:02. Показов 21064. Ответов 6
Уважаемые форумчане.Нужна ваша помощь.Не могу решить задачу,ибо туп.
Дано: Определить можно ли с использованием только операций «прибавить 3» и «прибавить 5» получить из числа 1 число N (N - натуральное, не превышает 106). Разумеется, само число 1 получить можно, просто не применяя никаких операций. Входные данные: Вводится число N. Выходные данные :Выведите слово YES, если число N можно получить из числа 1, или NO - в противном случае. Ниже мой код.Не знаю,что дальше делать,то есть саму рекурсивную функцию написать не могу
Задачу решить надо с помощью рекурсии
0
|
07.10.2017, 16:02 | |
Ответы с готовыми решениями:
6
Составить последовательность арифметических операций для получения числа 90 Перевод числа из одной системы счисления в другую и выполнение арифметических операций Перевод числа из одной системы счисления в другую и выполнение арифметических операций Получение одного полинома из другого |
36 / 34 / 10
Регистрация: 15.07.2017
Сообщений: 126
|
|||||||||||
07.10.2017, 16:29 | 2 | ||||||||||
Сообщение было отмечено Asenaa как решение
Решение
Попробуйте такой вариант:
1
|
0 / 0 / 0
Регистрация: 07.10.2017
Сообщений: 4
|
|
07.10.2017, 16:38 [ТС] | 3 |
Спасибо большое.Все работает.Осталось код понять
0
|
36 / 34 / 10
Регистрация: 15.07.2017
Сообщений: 126
|
|
07.10.2017, 16:52 | 4 |
Чтобы понять рекурсию нужно понять рекурсию
Asenaa, Вам точно нужно с помощью рекурсии было сделать? Это, пожалуй, самое неоптимальное решение для данной задачи. ЗЫ: Да, и не кормите функцию большими значениями, а то стек забьётся и программа упадёт. ЗЗЫ: И return (can(n-3) || can(n-5)) лучше поменять на return (can(n-5) || can(n-3)), так должно немного быстрее работать.
0
|
0 / 0 / 0
Регистрация: 07.10.2017
Сообщений: 4
|
||||||
07.10.2017, 17:26 [ТС] | 5 | |||||
Да я понял рекурсию.Просто этот тип bool я вообще не понимаю.Вот так переписал код для себя.
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,884
|
||||||
07.10.2017, 17:48 | 6 | |||||
А ведь достаточно было одного цикла...
0
|
36 / 34 / 10
Регистрация: 15.07.2017
Сообщений: 126
|
|
07.10.2017, 19:43 | 7 |
Можно и вообще без циклов и рекурсий тогда уж.
Задача сводится к разрешимости линейного диофантова уравнения с двумя переменными. Действительно, требуется выяснить найдутся ли два таких натуральных числа и , что будет выполняться равенство , что можно переписать как Решая это уравнение получим его общее решение: Так как нам для решения требуются и , то решаем систему неравенств Итого: или , при этом должно быть целым числом. Короче просто достаточно проверить, что между и (включительно) есть целые числа. Добавлено через 11 минут Тип bool это логический тип, принимает два значения: true и false, которые можно трактовать как "да" и "нет" или как "не ноль" и "ноль" (но, хотя C и позволяет, лучше не мешать логические значения и числовые). То есть если функция возвращает bool, то она как бы отвечает на вопрос "да" или "нет". Представьте, что вместо функции can(n) написано "Разложимо n?", а её результат - "да", если true и "нет", если false.
1
|
07.10.2017, 19:43 | |
07.10.2017, 19:43 | |
Помогаю со студенческими работами здесь
7
Расставить знаки арифметических операций между цифрами числа A, чтобы получить число B Классы для арифметических операций с большими числами (целые числа более 10 знаков) В выражении a?b , где a и b вещественные числа замените вопросительный знак одной из арифметических операций Заменить в данной строке знаки арифметических операций названиями противоположных им операций Создание одного батника с помощью другого Пользователь вводит два целых числа, а компьютер выводит результат 5 арифметических операций над ними Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |