Рубрики

ВОРОТА | GATE-CS-2014- (Set-2) | Вопрос 65

Предположим, что n и p являются беззнаковыми переменными типа int в C-программе. Мы хотим установить p в n C 3 . Если n большое, какое из следующих утверждений, скорее всего, правильно установит p?

(А) р = n * (n-1) * (n-2) / 6;
(B) p = n * (n-1) / 2 * (n-2) / 3;
(С) p = n * (n-1) / 3 * (n-2) / 2;
(D) p = n * (n-1) * (n-2) / 6,0;

Ответ: (Б)
Объяснение: Поскольку n большое, произведение n * (n-1) * (n-2) выйдет за пределы диапазона (переполнение) и вернет значение, отличное от ожидаемого. Поэтому варианты (A) и (D) исключаются.
Поэтому мы рассмотрим более короткое произведение n * (n-1).
n * (n-1) всегда четное число. Таким образом, подвыражение «n * (n-1) / 2» в опции B всегда будет давать целое число, что означает отсутствие потери точности в этом подвыражении. И когда мы рассмотрим «n * (n-1) / 2 * (n-2)», он всегда будет давать число, кратное 3. Так что деление его на 3 не будет иметь никаких потерь.
Тест на этот вопрос

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

ВОРОТА | GATE-CS-2014- (Set-2) | Вопрос 65

0.00 (0%) 0 votes