Почему на выходе 36, а не 24? - PullRequest
0 голосов
/ 07 ноября 2019

#include <stdio.h>
#include <stdlib.h>

int f(int a, int b) {
    int a1 = a, b1 = b;

    while (a1 != b1)
        if (a1 < b1) a1 += a;
        else b1 += b;

    return a1;
}

int main() {
    printf("%d\n", f(12, 18));
    return 0;
} 

Привет, я не понимаю, почему результат 36, может кто-нибудь объяснить мне?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

После первой итерации цикла while a1 равен 24 из-за этого оператора

if (a1 < b1) a1 += a;

Таким образом, условие цикла

while (a1 != b1)

выполняется. a1 равно 24, b1 равно 18. a1 не равно b1.

Теперь во второй итерации b1 меньше a1, поэтому выполняется оператор else

else b1 += b;

.

Теперь b1 равно 36.

На третьей итерации a1 снова меньше b1, поэтому a1 становится равным 36 как b1 из-за выполненияоператор

if (a1 < b1) a1 += a;

Так цикл останавливается. И функция возвращает 36.

0 голосов
/ 07 ноября 2019

Давайте пройдем через:

f(12, 18) -> a = 12, b = 18
int a1 = a, b1 = b; -> a1 = 12, b1 = 18
while (a1 != b1) -> not equal -> do the loop
if (a1 < b1) a1 += a; -> a1 = 24
while (a1 != b1) -> not equal -> do the loop
if (a1 < b1) ... else b1 += b; -> b1 = 36
while (a1 != b1) -> not equal -> do the loop
if (a1 < b1) a1 += a; -> a1 = 36
while (a1 != b1) -> equal -> end the loop
return a1 -> return 36
...