ЕГЭ. Информатика. Поляков. Решение. C4-38
Продолжаю готовиться к ЕГЭ решая задачки из задач Полякова, делюсь решением на C.
Условие🔗︎
По каналу связи передается последовательность положительных целых чисел X1, X2, …; все числа не превышают 1000, их количество заранее неизвестно. Каждое число передается в виде отдельной текстовой строки, содержащей десятичную запись числа. Признаком конца передаваемой последовательности является число 0.
Участок последовательности от элемента XT до элемента XT+N называется подъемом, если на этом участке каждое следующее число больше предыдущего. Высотой подъема называется разность XT+N - XT.
Напишите эффективную программу, которая вычисляет наибольшую высоту среди всех подъемов последовательности. Если в последовательности нет ни одного подъема, программа выдает 0. Программа должна напечатать отчет по следующей форме:
Получено ... чисел
Наибольшая высота подъема: ...
Размер памяти, которую использует Ваша программа, не должен зависеть от длины переданной последовательности чисел.
Решение на C🔗︎
#include <stdio.h>
int main()
{
int input = 0, start = 0, before = 0, k = 0;
do
{
scanf("%d", &input);
if (input == 0)
{
printf("Получено %d чисел\nНаибольшая высота подъёма: %d", k, before-start);
break;
}
k++;
if (input > before)
{
before = input;
}
else
{
start = input;
before = input;
}
}
while (true);
return 0;
}
Решение на Rust🔗︎
use std::io;
fn main() {
let mut start = 0;
let mut before = 0;
let mut k = 0;
loop {
let input = read_input_value();
if input == 0 {
println!("Получено {} чисел", k);
println!("Наибольшая высота подъёма: {}", before - start);
break;
}
k += 1;
if input > before {
before = input;
} else {
start = input;
before = input;
}
}
}
fn read_input_value() -> usize {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Ошибка ввода");
input.trim().parse().expect("Ошибка ввода")
}