ЕГЭ. Информатика. Поляков. Решение. C4-38

1 минут

Продолжаю готовиться к ЕГЭ решая задачки из задач Полякова, делюсь решением на 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("Ошибка ввода")
}