diff options
| author | Syndamia <kamen@syndamia.com> | 2024-01-05 08:59:38 +0200 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2024-01-05 08:59:38 +0200 |
| commit | 7e7c710287f25b9c958c9026b18f88587174d47f (patch) | |
| tree | 7eba964d18ec76111c24deca68fb2aea27e85005 /week11/ex3.cpp | |
| parent | dbdce2c71e8327d5cbfa3e87840866b504efec0f (diff) | |
| download | upp-2023-solutions-7e7c710287f25b9c958c9026b18f88587174d47f.tar upp-2023-solutions-7e7c710287f25b9c958c9026b18f88587174d47f.tar.gz upp-2023-solutions-7e7c710287f25b9c958c9026b18f88587174d47f.zip | |
[w11] Added solutions
Diffstat (limited to 'week11/ex3.cpp')
| -rw-r--r-- | week11/ex3.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/week11/ex3.cpp b/week11/ex3.cpp new file mode 100644 index 0000000..bdcf937 --- /dev/null +++ b/week11/ex3.cpp @@ -0,0 +1,30 @@ +#include <iostream> + +void ages(const int mult, const int sum, int youngest, int middle, int oldest, bool &foundSolution) { + // Не проверяваме за сума, понеже винаги правим такива извиквания, че сумата да е коректна + if (youngest * middle * oldest == mult) { + std::cout << youngest << " " << middle << " " << oldest << std::endl; + foundSolution = true; + return; + } + + // Правим middle по-стар като копенсираме чрез по-млад oldest + if (!foundSolution && oldest - 1 > middle + 1) + ages(mult, sum, youngest, middle + 1, oldest - 1, foundSolution); + // Правим youngest по-стар, като middle трябва да има най-малко същата му възраст + if (!foundSolution && sum - 2*(youngest + 1) > youngest + 1) + ages(mult, sum, youngest + 1, youngest + 1, sum - 2*(youngest + 1), foundSolution); +} + +void ages(const int mult, const int sum) { + bool foundSolution = false; + // Започваме с минималните възможни възрасти за youngest и middle + ages(mult, sum, 1, 1, sum - 2, foundSolution); +} + +int main() { + int mult, sum; + std::cin >> mult >> sum; + + ages(mult, sum); +} |
