aboutsummaryrefslogtreecommitdiff
path: root/week11/ex3.cpp
diff options
context:
space:
mode:
authorSyndamia <kamen@syndamia.com>2024-01-05 08:59:38 +0200
committerSyndamia <kamen@syndamia.com>2024-01-05 08:59:38 +0200
commit7e7c710287f25b9c958c9026b18f88587174d47f (patch)
tree7eba964d18ec76111c24deca68fb2aea27e85005 /week11/ex3.cpp
parentdbdce2c71e8327d5cbfa3e87840866b504efec0f (diff)
downloadupp-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.cpp30
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);
+}