Форум » Циклы и ветвления » И снова задание 21 » Ответить

И снова задание 21

Galina14: Здравствуйте, помогите разобраться! Задание 21 номера 69, 70, 71. Почему в задании №69 границы находятся не в диапазоне [7..22], а в диапазоне [8..22]. А в задании № 70 наоборот, границы находятся не в диапазоне [3..18]. а в диапазоне [3..19]. А в номере №71 вообще не понятно, взяты границы не [5..27] - ведь К=13 входит в этот диапазон, а границы [11..44]. Почему?????

Ответов - 13

Поляков: Galina14 пишет: помогите разобраться! Задание 21 номера 69, 70, 71. Во время подготовки к экзамену (т.е. сейчас) программу можно набрать и запустить, поиграться с ней, пройти в пошаговом режиме, посмотреть, как меняются переменные и т.п. Все остальное - чистая арифметика.

Galina14: Спасибо большое, натворила математических ошибок, вот с интервалами и напутала. Все свои ошибки нашла!!!

Marina67: Не получается верхняя граница. (88+12)/2=50


Marina67: Помогите!!!! не получается 44!!!

ЕЛ: var k, i : longint; function f(n: longint): longint; begin f:= n*n*n - 5*n; end; begin readln(k); i := 1; while f(i) < k do i := i + 1; if 2*f(i)-k <= k-f(i-1) then writeln(i) else writeln(i-1); end. Не сходится с ответом. У меня верхняя граница 50, нижняя 11, а ответ 36! Подскажите, пожалуйста. Заранее спасибо!

Е: var k, i : longint; function f(n: longint): longint; begin f:= n*n*n - 5*n; end; begin readln(k); i := 1; while f(i) < k do i := i + 1; if 2*f(i)-k <= k-f(i-1) then writeln(i) else writeln(i-1); end. Не сходится с ответом. У меня верхняя граница 50, нижняя 11, а ответ 36! Подскажите, пожалуйста. Заранее спасибо!

Медко: Е пишет: Не сходится с ответом. У меня верхняя граница 50, нижняя 11, а ответ 36! Подскажите, пожалуйста. Заранее спасибо! 1) При k=13 у Вас выполняется цикл while 3 раза, следовательно i:=4, тогда на экран выводится значение 3 (поскольку 100 > 26) 2) Поэтому для случая, когда на экран выводится i-1, k = 13...44 3) Для второго случая у Вас k = 11, 12 4) В итоге получается k= 11...44, всего 34 значения.

ELE: Помогите, пожалуйста! Не получается нижняя граница. У меня 7, в ответе 3. 6-k <=k-8 заранее спасибо!

Медко: ELE пишет: Не получается нижняя граница. У меня 7, в ответе 3. Вы забыли тот случай, когда цикл while не выполнится ни разу, т.е. при условии, что f(1) >= k. Отсюда k <= 6. Но при этом на экран выводится 1, поэтому у Вас будет еще и условие f(1) - k <= k - 2*f(0). Отсюда k >= 3. Объединяя эти два условия получим, что k = 3, 4, 5, 6. Вот Ваши недостающие четыре значения. В итоге получаем 13 + 4 = 17 значений.

ELE: var k, i : longint; function f(n: longint): longint; begin f:= n*n+8; end; begin readln(k); i := 0; while f(i) < k do i := i + 1; if f(i)+f(i+1) <= k*2 then writeln(i) else writeln(i-1); end. сколько значений"k", при которых тот же ответ, что и при к=40? даже"поиграв в программе" получаем нижнюю границу 34, верхнюю 44, т.е. ответ 11, а не 12. Хотя в теории получилось 29<=k<38 Заранее спасибо! end.

Поляков: ELE пишет: т.е. ответ 11, а не 12. Да. Хотя в теории получилось 29<=k<38 Нет. Есть желание разобраться - приводите решение. Там наверняка ошибка.

ELE: f(4)=24 f(5)=33 f(6)=44 находим для i-1 24+33<=2*k k>=28,5 для i 33+44>2*k k<38,5

Поляков: ELE пишет: находим для i-1 24+33<=2*k k>=28,5 для i 33+44>2*k k<38,5 Тут немного хитрее. Цикл останавливается, когда f(i) >= k. При этом, f(i+1)>f(i), поэтому f(i+1)>k. Следовательно, f(i)+f(i+1) >2*k всегда, и всегда выводится i-1. Остается определить, сколько чисел попадает в ту же группу, что и 40 - это все числа на отрезке [34;44]. Их 11. Для них i=6 после окончания цикла и выводится i-1=5.



полная версия страницы