Ответы пользователя по тегу Алгоритмы
  • Как определить долгий авиамаршрут?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Рискну предположить, я вижу это так:

    0. Берем данные в массив, сортируем массив по дате.
    1. Берем самую малую дату - аэропорт вылета (SVO), запоминаем в переменную
    2. Берем самую большую дату - аэропорт прелета. (DME), запоминаем в переменную
    3. Далее (понимаем, что оба аэропорта в Москве, и бомжуем 9 дней.) - т.е. break; (если мы берем под "долгий" - время, а не "время полетов") Если нет, то:
    4. Первый элемент массива = первый рейс в любом случае, берем аэропорт прилета.
    5. Перебор массива по порядку со второго элемента (key = 1, а не 0), проверяем все элементы на условие "если аэропорт вылета = последнему аэропорту прилета", если таких несколько, то рекурсия этой же функции (строим несколько маршрутов в этом случае) и так до конца, пока не выполнятся все рекурсии.
    6. после Берем все собранные маршруты, смотрим, если последний аэропорт не соответствует данным из пункта 2 (аэропорт прилета - DME) - то удаляем эти маршруты.
    7. Из оставшихся смотрим, какой из маршрутов имеет больше рейсов и\или чья дата последнего рейса больше (зависит от того, что мы берем под "долгий" - время полета или количество рейсов)

    Не претендую на самое оптимальное решение, наверное, если включить какую математику, то, возможно, можно сделать анализ быстрее\лучше\красивее.
    Ответ написан
    Комментировать
  • Как решать задачу на счастливые билеты?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Вот решение на php, в C++ я не очень силен, но думаю разбить строку на элементы и преобразовать их в массивы Вы сможете. Также думаю, что мой код понятен, синтаксис у php не сильно отличается от сишного. В общем, Вы справитесь.

    <?php
    
    $lucky = 0;
    for ($i = 10000000; $i < 99999999; $i++) {
    	$str = (string) $i;
        $sum1 = (int) $str[0] + (int) $str[1] + (int) $str[2] + (int) $str[3];
        $sum2 = (int) $str[4] + (int) $str[5] + (int) $str[6] + (int) $str[7];
        if ($sum1 == $sum2) {
        	$lucky++;
        }
    }
    
    echo $lucky;


    UPD: код протестировал, этот, кажется, рабочий.
    Скобки перед переменными - это преобразование типов.
    Ответ написан
    6 комментариев