Рубрики

ВОРОТА | GATE-CS-2016 (набор 2) | Вопрос 45

Следующая функция вычисляет X Y для натуральных чисел X и Y.

int exp(int X, int Y)

{

    int res = 1, a = X, b = Y;

    while ( b != 0 )

    {

        if ( b%2 == 0)

        {

            a = a*a;

            b = b/2;

        }

        else

        {

            res = res*a;

            b = b-1;

        }

    }

    return res;

}

Какое из следующих условий ИСТИНА перед каждой итерацией цикла

(А) А
(Б) Б
(С) С
(D) D

Ответ: (с)
Объяснение:

Мы можем решить этот вопрос, принимая любые два значения для X и Y.
Предположим, что X = 2 и Y = 5, теперь этот код будет рассчитывать
Глядя на каждую итерацию отдельно
Перед итерацией 1 — X = 2 Y = 5 a = 2, b = 5, res = 1
Итерация 1 — поскольку b% 2! = 0, мы переходим к другой части
Поэтому после итерации 1 X = 2, Y = 5, a = 2, b = 4, res = 2
Итерация 2 — так как b% 2 = 0, мы идем, если часть
Поэтому после итерации 2 X = 2, Y = 5, a = 4, b = 2, res = 2
Итерация 3 — так как b% 2 = 0, мы идем, если часть
Поэтому после итерации 3 X = 2, Y = 5, a = 16, b = 1, res = 2
Итерация 4 — поскольку b% 2! = 0, мы переходим к другой части
Поэтому после итерации 4 X = 2, Y = 5, a = 16, b = 0, res = 32
Теперь поместим значения X, Y, a, b, res в уравнения, приведенные в опциях после каждого
итерации мы можем видеть только уравнение с является правильным.

Это решение предоставлено Parul Sharma.

Другое решение

В варианте С

Before Iteration 1: X^Y=64 res ∗ (a^b)=64
Before Iteration 2: X^Y=64 res ∗ (a^b)=64
Before Iteration 3: X^Y=64 res ∗ (a^b)=64 

Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE-CS-2016 (набор 2) | Вопрос 45

0.00 (0%) 0 votes