Ю3.45

Ю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 циклом (C++):

Java:

 

По условию задачи необходимо вывести все возможные варианты сочетаний количества кроликов и гусей.

Для того, чтобы это сделать, программа использует 2 цикла. В первом исследуется количество гусей: изначально переменной присваивается значение 0, затем следует условие продолжения (количество гусей не должно превышать [latex]n[/latex], то есть количество лап, делённое на 2).

После запуска первого цикла программа проверяет условие продолжения вложенного второго цикла (количество кроликов не превышает [latex]\frac{n}{2}[/latex]), в котором переменной [latex]k[/latex] также изначально присваивается значение 0. В случае выполнения условий обоих циклов программа проверяет, действительно ли количество лап гусей и кроликов в сумме даёт [latex]2n[/latex], заданных по условию задачи пользователем.

Если условие выполнено успешно, то на экран выводится один из вариантов сочетаний. После чего цикл повторяется благодаря заданным изначально инкрементам.

Для тестов выбраны не слишком большие значения [latex]n[/latex], так как посчитать их вручную достаточно проблематично.

Протестировать решение можно по ссылкам: первое, второе (C++) и на Java.

Related Images:

Ю 3.14

Задача

Проверить численно второй замечательный предел:[latex]\lim_{x\to\infty}\left(1+\frac{1}{n}\right)^n=e[/latex] , задавая n значения 1,2,3…При каком n исследуемое выражение отличается от менее, чем на заданную погрешность [latex]\varepsilon[/latex]?

Тесты

[latex]\varepsilon[/latex] n Полученное e e Разность Комментарий
1.1   1  2.0000000000 2.7182818284  0.7182818284 Пройден
 0.005  271 2.7132834531 2.7182818284 0.0049983753 Пройден
0.0000000314 32890950 2.7182817970 2.7182818284 0.0000000313 Пройден
 0 Погрешность равна 0, тогда e=2.7182818284, а n=бесконечность Не пройден

Код программы:

В данной задаче необходимо было сравнить заданную погрешность [latex]\varepsilon[/latex] с разностью между числом е и полученным значением при некотором n.

Для этого в цикле высчитывалось значение формулы [latex](1+\frac{1}{n})^{n}[/latex] при [latex]n\to \infty[/latex] и находилась разность [latex]dife=e-(1+\frac{1}{n})^{n}[/latex]. Если[latex]dife>\varepsilon[/latex] , то цикл заканчивался и программа запоминала последнее значение n и после этого выводила его на экран.

Код на Java

 

Related Images:

Ю3.5

Задача Ю3.5. Коммерция. Предприниматель, начав дело, взял кредит размером [latex]k[/latex] рублей, под [latex]p[/latex] процентов годовых и вложил его в своё дело. По прогнозам, его дело должно давать прибыль [latex]r[/latex] рублей в год. Сможет ли он накопить сумму, достаточную для погашения кредита, и если да, то через сколько лет?

[latex]k[/latex] [latex]p[/latex] [latex]r[/latex] [latex]n[/latex] Комментарий.
1800 50 1000 Кредит не будет погашен.
800000 15 40000 Кредит не будет погашен.
1000 5 400 3 Тест пройден.
1500 3,5 400 5 Тест пройден.

Код программы (C++):

Java:

По условию задачи необходимо определить, сможет ли должник накопить сумму, достаточную для погашения кредита, и если да, то через сколько лет.

Изначально запускается цикл, который основан на сравнении дохода за несколько лет [latex]nr[/latex] и размера кредита, которого он достигнет за эти годы (вычисляется по формуле сложных процентов: [latex]k(1+\frac{p}{100})^{n}[/latex]).

Затем программа проверяет, как возрастают доходы и долг за год. Если скорость роста доходов не превышает скорость роста долга, то программа выдаёт ошибку, или «кредит не будет погашен», после чего возвращается 0 и программа считается успешно завершённой. В противном случае цикл повторяется, а по его окончании на экран выводится количество лет, за которые долг можно будет погасить.

Проверить код можно здесь (C++) и здесь (Java).

Related Images:

Ю 3.4

Задача: Прямоугольник на плоскости [latex]a \le x \le b, \quad c \le y \le d[/latex] задаётся четырьмя числами (его габаритами): [latex]a, b, c, d.[/latex] Последовательно вводятся габариты [latex]n[/latex] прямоугольников. В процессе ввода находить площадь их пересечения, не запоминая самих габаритов.

NI — «no intersection» — нет общего сегмента

[latex]a[/latex] [latex]b[/latex] [latex]c[/latex] [latex]d[/latex] [latex]S[/latex] Комментарий
1 -5 -3 1 4 NI Пройден: нет общего интервала
-2 0 1 4
2 0 4.5 1.2 4.6 NI Пройден: нет общего интервала
2 4 5 7.4
3 2 5 1 4 NI Пройден: общая сторона не считается пересечением, т.к. даёт нулевую площадь
5 6 1 4
4 2 4 2 4 4 Пройден
2 4 2 4
5 2 5 1 4 NI Пройден: не все данные прямоугольники имеют общий сегмент
0 3 2 3
6 7 3 5
6 0 7 0 3 1 Пройден
2 6 1 5
3 5 2 5
4 8 2 3
 

Алгоритм решения:
1. Для удобства, запрограммировать задачу можно, сведя её к одномерному случаю: рассматривать проекции сторон прямоугольников на координатные оси. (см. рис. 1)
2. Проверка на пересечение: данные прямоугольники пересекаются и имеют общую площадь, если их проекции имеют общий интервал значений, больший одной точки.
3. Так как запоминать габариты прямоугольников нельзя по условию, работать будем с габаритами «общего» прямоугольника, которые сохраняются соотв. в переменные [latex]x1 \le x2, y1 \le y2[/latex]. Если новый прямоугольник пересекается с «общим», то определить обновленные габариты общего прямоугольника и рассчитать площадь(см. рис. 2). Если не пересекается, то выполнение программы прерывается, т.к. нужно вывести площадь прямоугольника, общего для всех [latex]n[/latex] прямоугольников.

Значения переменных в условии задачи не ограничены, так что для хранения габаритов был использован тип double, для всех порядковых переменных — тип int.

Протестировать решение можно по ссылке.

Related Images: