Я пытаюсь создать игру медведя, в которой пользователь вводит число (n), и программа увидит, сможет ли она достигать числа 42, выполнив некоторые указанные шаги. Если он не может, он уведомляет пользователя о том, что номер не может достичь цели.Достижение числа 42 путем рекурсии
Таковы правила:
- Если п четно, то вы можете вернуть ровно п/2 медведей.
- Если n делится на 3 или 4, вы можете умножить последние две цифры n и вернуть это многим медведям.
- Если n делится на 5, то вы можете вернуть ровно 42 медведя.
Вот пример:
- Старт с 250 медведей
- С 250 делится на 5, вы можете вернуть 42 медведей, оставив вас с 208 медведей.
- Начиная с 208 года, вы можете вернуть половину медведей, оставив вас с 104 медведями.
- Начиная с 104 года, вы можете вернуть половину медведей, оставив вас с 52 медведями.
- Поскольку 52 делится на 4, вы можете умножить последние две цифры (в результате получится 10) и вернуть этих 10 медведей. Это оставляет вас с 42 медведями.
- Вы достигли цели!
Вот что я до сих пор:
#include <iostream>
using namespace std;
bool bears(int n);
int main(){
int number;
do{
cout<<"enter the amount of bears (press 0 to stop the program): ";
cin>>number;
if (bears(number)){
cout<<"you have reached the goal!"<<endl;
}
else{
cout<<"sorry, you have not reached the goal."<<endl;
}
}while(number != 0);
}
bool bears(int n){
if (n < 42){
return false;
}
else if (n == 42){
return true;
}
else{
if (n % 5 == 0){
return bears(n - 42);
}
else if(n % 2 == 0){
return bears(n/2);
}
else if(n % 4 == 0|| n % 3 == 0)
{
int one;
int two;
one=n%10;
two=(n%100)/10;
return bears(n - one * two);
}
}
}
Моя программа имеет основные правила, но когда я типа в 250 медведей он говорит, что не может достичь цели. Я понимаю, что происходит в коде и почему он не может достичь указанной цели, но как сделать его универсальным, поэтому он будет работать не только для числа 250, но и для других чисел, таких как: 84.
Все рекурсивные вызовы должны быть «return bears (...);». – Barmar
@Barmar Мой вопрос не похож на тот вопрос, на который вы указали. Кроме того, возврат не устраняет проблему. Проблема такая же, даже с добавлением оператора return. – user2896120
Прочтите вопрос, и вы узнаете, что это не точный дубликат .... – user2896120