Задача
Приближалась зима, и Хома с Сусликом решили запастись горохом. Весь день они бегали в амбар и таскали по несколько стручков: Хома по четыре, а Суслик по два. К вечеру они пересчитали все стручки, что они натаскали, и задумались, как теперь этот горох делить. Хома утверждал, что если он за раз тащил в два раза больше, чем Суслик, то и гороха ему должно достаться в два раза больше. Суслик на это резонно возражал, что, во-первых, скорость у Хомы заметно меньше, чем у Суслика, а, во-вторых, кто его знает, может Хома всего раз-два сбегал, а остальное время бездельничал…
Помогите друзьям хоть немного разобраться в этой сложной ситуации. Определите все возможные варианты того, сколько стручков притащил Суслик, а сколько Хома.
Входные данные
В первой строке натуральное четное число [latex]M[/latex] – количество украденных стручков, [latex]2 ≤ M ≤ 1000[/latex].
Выходные данные
Все возможные сочетания количеств стручков, принесенных Сусликом и Хомой по одному сочетанию в строке. Каждое сочетание представляет собой два целых неотрицательных числа через пробел: первое число – количество стручков, принесенных Сусликом, второе – принесенных Хомой. Сочетания упорядочить по убыванию первого числа.
Тесты
Входные данные | Выходные данные | |
[latex]6[/latex] | [latex] \\ 6 \; 0 \\ 2 \; 4[/latex] | |
[latex]11[/latex] | [latex]\\ 11\;0 \\ 7\;4 \\ 3\;8[/latex] | |
[latex]18[/latex] | [latex]\\ 18\;0 \\ 14\;4 \\ 10\;8 \\ 6\;12 \\ 2\;16[/latex] | |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> using namespace std; int main() { int a, b = 0; cin >> a; while (a >= 0) { cout << a << " " << b << "\n"; a -= 4; b += 4; } return 0; } |
Решение задачи
Пусть [latex]a[/latex] — количество стручков, принесенных Хомой и [latex]b[/latex] — количество стручков, принесенных Сусликом. Так как по условию задачи Хома таскал только по четыре стручка, мы будем считать [latex]a = a-4[/latex] и [latex]b = b + 4[/latex], чтобы таким образом перебрать все возможные сочетания количеств стручков, принесенных Сусликом и Хомой. Также воспользуемся циклом while, который будет повторять действие, описанное выше, до тех пор, пока [latex]a \geq 0[/latex]. В ответе выводим все возможные сочетания количеств стручков, принесенных друзьями по одному в строке, упорядоченные по убыванию первого числа.
Ссылки
Условие задачи на e-olymp
Код решения на ideone
Хорошо. На будущее старайтесь не конкретизировать какими именно программными средствами будет реализован алгоритм. Если что-то нужно уменьшать на 4 пока не достигнем нуля, то этим уже всё сказано. Будет тут цикл for, while или рекурсивная функция, зависит от реализации. Я, например, делал так:
Спасибо, учту.