Top.Mail.Ru
Ответы
Аватар пользователя
2 года назад
от

Предмет: Информация. Вопрос: 26

Если при вычислении на компьютере числа сочетаний из n по к, равного

C(индекс n, степень k)= (n!)/(k!*(n-k)!), находить отдельно числитель и знаменатель, то может возникнуть проблема переполнения. Проблема решается рекуррентной формулой C(индекс n, степень k)=C(индекс n-1, степень k)+C(индекс n-1, степень k-1). Ниже приведены девять пронумерованных в произвольном порядке фрагментов функции, написанной на языке С++ и реализующей вычисление C(индекс n, степень k) по приведённой рекуррентной формуле. В
лист ответов запишите номера фрагментов без пробелов и запятых в том порядке, при котором данная функция корректно решает поставленную задачу. Таким образом, ответом задания является девятизначное натуральное число.

1) n, long k
2) return n; if (k==0) return 1;
3) ){
4) (long
5) if (n==k) return 1; if (k==1)
6) c(n-1, k)+c(n-1, k-1);
7) }
8) long C
9) return

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

Проблему целочисленного переполнения заменили проблемой переполнения стека и многократно избыточными вычислениями. Это талант.
Последовательность строк:

123456789
 8
4
1
3
5
2
9
6
7 
Аватар пользователя
Мудрец

(Переведено еще раз переводчиком!)

Ответ на этот вопрос 6.

Это связано с тем, что второй фрагмент (2) будет выполняться первым, если n и k оба являются длинными значениями.

Как только этот фрагмент будет выполнен, n и k будут установлены в 0.

Это приведет к тому, что условные операторы как во фрагменте (3), так и во фрагменте (6) будут оценены как ложные.

Следовательно, фрагмент (3) и фрагмент (6) не будут выполняться.

Это означает, что функция вернет значение 6, что является правильным ответом.