Ю3.45. Гуси и кролики. У гусей и кроликов вместе [latex]2n[/latex] лап. Сколько может быть гусей и кроликов (вывести все возможные сочетания)?
[latex]n[/latex] | Гусей. | Кроликов. | Комментарий. |
4 | 0, 2, 4 | 2, 1, 0 | Тест пройден. |
3 | 1, 3 | 1, 0 | Тест пройден. |
0 | 0 | 0 | Тест пройден. |
7 | 1, 3, 5, 7 | 3, 2, 1, 0 | Тест пройден. |
Код программы (C++):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> int main(void) { int g, k, n; // Выбран тип int, так как это животные, и их количество может быть только целым неотрицательным числом. Гуси и кролики названы g и k соответственно. scanf ("%d", &n); // Ввод данных с клавиатуры. for (g=0; g<=n; g++) { for (k=0; k<=n/2; k++) { if (2*g + 4*k == 2*n) { printf ("Гусей - %d. \nКроликов - %d.\n\n", g, k); } } } return 0; } |
Второй вариант с 1 циклом (C++):
1 2 3 4 5 6 7 8 9 10 11 |
#include <stdio.h> int main(void) { int g, k, n; // Выбран тип int, так как это животные, и их количество может быть только целым неотрицательным числом. Гуси и кролики названы g и k соответственно. scanf ("%d", &n); // Ввод данных с клавиатуры. for (k=0; k<=n/2; k++) { g=(2*n-4*k)/2; printf ("Гусей - %d. \nКроликов - %d.\n\n", g, k); } return 0; } |
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { int g, k, n; Scanner in= new Scanner (System.in); n=in.nextInt(); for (g=0; g<=n; g++) { for (k=0; k<=n/2; k++) { if (2*g + 4*k == 2*n) { System.out.format ("Гусей - %d. Кроликов - %d.%n", g, k); } } } } } |
По условию задачи необходимо вывести все возможные варианты сочетаний количества кроликов и гусей.
Для того, чтобы это сделать, программа использует 2 цикла. В первом исследуется количество гусей: изначально переменной присваивается значение 0, затем следует условие продолжения (количество гусей не должно превышать [latex]n[/latex], то есть количество лап, делённое на 2).
После запуска первого цикла программа проверяет условие продолжения вложенного второго цикла (количество кроликов не превышает [latex]\frac{n}{2}[/latex]), в котором переменной [latex]k[/latex] также изначально присваивается значение 0. В случае выполнения условий обоих циклов программа проверяет, действительно ли количество лап гусей и кроликов в сумме даёт [latex]2n[/latex], заданных по условию задачи пользователем.
Если условие выполнено успешно, то на экран выводится один из вариантов сочетаний. После чего цикл повторяется благодаря заданным изначально инкрементам.
Для тестов выбраны не слишком большие значения [latex]n[/latex], так как посчитать их вручную достаточно проблематично.
Протестировать решение можно по ссылкам: первое, второе (C++) и на Java.
Засчитано, 10 баллов.
Решать полным перебором задачу на вычитание, это…. supercalifragilisticexpialidocious
Да и ответ забыли вывести…