From 99ea748a167fb801b196308624775128d5db57c0 Mon Sep 17 00:00:00 2001 From: me Date: Thu, 29 Jan 2026 15:14:28 +0500 Subject: [PATCH] add task 2 --- 1. problem_rl/solution.c | 102 +++++++++++++++++++++++++++++++++++++++ README.md | 7 +++ 2 files changed, 109 insertions(+) create mode 100644 1. problem_rl/solution.c diff --git a/1. problem_rl/solution.c b/1. problem_rl/solution.c new file mode 100644 index 0000000..82cd405 --- /dev/null +++ b/1. problem_rl/solution.c @@ -0,0 +1,102 @@ +/* +Problem RL -- рекурсия в цикл + +Ниже приведён исходный код программы для рекурсивного алгоритма Евклида. + +Ваша задача: переписать его так, чтобы вместо рекурсии использовался цикл + +Посылка должна состоять из программы, считывающей со стандартного ввода два числа x и y и выводящей на стандартный вывод одно число g + +Пример 1 + +Ввод: 2 1 +Вывод: 1 + +Пример 2 + +Ввод: 3 2 +Вывод: 1 + +Пример 3 + +Ввод: 2 4 +Вывод: 2 + +Примечания + +#include +#include +#include + +unsigned long long gcd(unsigned long long x, + unsigned long long y) { + unsigned long long q; + if (y > x) + return gcd(y, x); + assert (y > 0); + q = x % y; + if (q == 0) + return y; + return gcd(y, q); +} + +int main() { + unsigned long long x = 0, y = 0, g; + int res; + + res = scanf("%llu %llu", &x, &y); + assert(res == 2); + g = gcd(x, y); + printf("%llu\n", g); + return 0; +} +*/ + +#include +#include +#include + +#define ull unsigned long long +#define ll long long + +ull gcd_cycle(ll x, ll y); +ull gcd_recursive(ull x, ull y); + +int main() { + ull x = 0, y = 0, g; + int res; + + res = scanf("%llu %llu", &x, &y); + assert(res == 2); + g = gcd_cycle(x, y); + printf("%llu\n", g); + return 0; +} + +ull gcd_recursive(ull x, ull y) { + ull q; + if (y > x) + return gcd_recursive(y, x); + assert (y > 0); + q = x % y; + if (q == 0) + return y; + return gcd_recursive(y, q); +} + +ull gcd_cycle(ll x, ll y) { + x = llabs(x); + y = llabs(y); + + if (x == 0) return y; + if (y == 0) return x; + + while (y != 0) { + ll r = x % y; + x = y; + y = r; + } + + return x; +} + diff --git a/README.md b/README.md index e69de29..8362b94 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,7 @@ +here i've got various tasks (w/ solutions) from C contest + +| **Number** | **Name** | **Solution** | +| ---------- | -------- | ------------ | +| 1 | *problem_rl* | [C](1.%20problem_rl/solution.c) | + +