Цель: Понять и решить задачу детально и дать готовый алгоритм на языке qbasik (QBASIC-подобный синтаксис).
Задача: на 100 голов скота нужно потратить 100 руб., цены: бык — 10 руб., корова — 5 руб., телёнок — 0.5 руб. Сколько нужно купить быков, коров и телят?
- Математическое решение (пошагово)
Обозначим: B — число быков, K — число коров, T — число телят. Условия:
- B + K + T = 100
- 10B + 5K + 0.5T = 100
Умножим второе уравнение на 2, чтобы избавиться от дроби: 20B + 10K + T = 200
Подставим T = 100 − B − K из первого уравнения: 20B + 10K + (100 − B − K) = 200 19B + 9K = 100
Решаем диофанову систему 19B + 9K = 100 для неотрицательных целых B, K. Обычный способ: по модулю по mod 9: 19B ≡ 100 (mod 9) → 1·B ≡ 1 (mod 9) → B ≡ 1 (mod 9) Следует B = 1 + 9m. Ограничение по величине: 19B ≤ 100 → B ≤ 5. Едва подходящих значений: B = 1 (потому что B = 10 уже слишком велико).
Нашёлся единственный неотрицательный вариант: B = 1 → 19·1 + 9K = 100 → 9K = 81 → K = 9. Тогда T = 100 − B − K = 100 − 1 − 9 = 90.
Проверка: 10·1 + 5·9 + 0.5·90 = 10 + 45 + 45 = 100. Всё верно.
Вывод: можно купить 1 быка, 9 коров и 90 телят.
- Алгоритм на qbasik (QBASIC-подобный код) Реализация выполняет перебор Пар и ищет комбинацию, удовлетворяющую условиям. Вводить параметры не нужно — задача фиксированная, но код демонстрирует общий подход.
Пример программы на языке qbasik (QBASIC-подобный синтаксис):
10 REM Программа поиска чисел быков, коров и телят 20 TOTAL_HEADS = 100 30 FOR B = 0 TO TOTAL_HEADS 40 FOR K = 0 TO TOTAL_HEADS - B 50 T = TOTAL_HEADS - B - K 60 IF (20 * B + 10 * K + T) = 200 THEN 70 PRINT "Быков: "; B; " Коров: "; K; " Телят: "; T 80 END IF 90 NEXT K 100 NEXT B 110 END
Как это работает:
- В коде перебираются все возможные количества быков B и коров K, причём телят T определяется как оставшееся число голов: T = 100 − B − K.
- Проверяем условие двойной стоимости: 20B + 10K + T = 200, что эквивалентно 10B + 5K + 0.5T = 100.
- При обнаружении корректной комбинации выводим её. В данной задаче будет выведено: Быков: 1 Коров: 9 Телят: 90.
Дополнительная заметка:
- Если размер задания поменялся (например, другое количество голов или другая стоимость), достаточно поменять константы TOTAL_HEADS и выражение проверки (20B + 10K + T) = 2·COST, где COST — общая сумма умноженная на 2. Это позволяет избегать работы с дробями.