Входные данные дана последовательность натуральных чисел, в конце которой идет число 0. выходные данные определите, сколько элементов этой последовательности больше предыдущего. числа, идущие за нулем, считывать не нужно. язык python или pascal
Во вложении приведен рисунок, из которого видно принятое расположение треугольника. Треугольник прямоугольный и уравнение его гипотенузы можно получить из формулы уравнения прямой в отрезках. Алгоритм решения следующий. 1. Вводим значения a и b. 2. Очищаем переменную счетчика количества k нулём. 3. В цикле по х от 0 с шагом 1 до целой части b: - вычисляем целую часть y, найденного из приведенного уравнения - увеличиваем k на эту целую часть плюс 1 4. Выводим значение k.
Проверим этот алгоритм для нашего рисунка. a=3, b=4, y=³/₄(4-x), k=0 Для х=0 получаем у=3 и увеличиваем k на 3+1=4, т.е. k=4 Для х=1 получаем у=2.25, целая часть 2 и увеличиваем k на 2+1=3, т.е. k=7 Для х=2 получаем у=1.5, целая часть 1 и увеличиваем k на 1+1=2, т.е. k=9 Для х=3 получаем у=0.75, целая часть 0 и увеличиваем k на 0+1=1, т.е. k=10 Для х=4 получаем у=0, целая часть 0 и увеличиваем k на 0+1=1, т.е. k=11 Значение 11 выводим. Из рисунка видно, что точек действительно 11.
1. Современное решение
// PascalABC.NET 3.2, сборка 1425 от 22.04.2017 // Внимание! Если программа не работает, обновите версию!
begin var a,b:real; Write('Введите значения a и b через пробел: '); Read(a,b); Writeln(Range(0,Trunc(b)).Select(x->Trunc(a/b*(b-x))+1).Sum) end.
Контрольный пример Введите значения a и b через пробел: 3 4.0 11
2. Школьное решение в стиле ТурбоПаскаль 1983г.
var a,b,y:real; k,x:integer; begin Write('Введите значения a и b через пробел: '); Read(a,b); k:=0; for x:=0 to Trunc(b) do begin y:=a/b*(b-x); k:=k+Trunc(y)+1 end; Writeln(k) end.
Из 24 можно получить 0 так: 24 --> 12 --> 6 --> 4 --> 2 --> 0 Итого 5 шагов Чтобы понять, что это самый короткий вариант, пойдём с конца: 0 --> 2 (так как умножать 0 на 2 не имеет смысла, то прибавляем 2) --> 4 (этот результат получается в любом случае) --> 6 (так как отсюда мы быстро получим число 12, которое является половиной от 24) --> 12 --> 24
Из 293 не получить 0, так как 293 - нечётное число
Из 297 можно получить 13 за 142 шага, так как 297 - нечётное число, а это значит, что можно только уменьшать на 2
Из 297 можно получить 43 за 127 шагов (аналогично предыдущему примеру)
begin
ReadSeqIntegerWhile(t -> t <> 0).Incremental
.Where(t -> t > 0).Count.Println
end.
6 -8 9 -8 -5 7 7 -5 9 2 -8 10 1 -3 2 4 -2 -1 -4 08