Задача: Коммерсант, имея стартовый капитал k, занялся бизнесом, который ежемесячно увеличивал капитал на p%. Через сколько лет* он накопит сумму s, достаточную для покупки собственного магазина?
k | p | s | m (месяцы) | Коменнтарий: |
0 | 50 | 500 | — | No money — no honey |
10 | 0 | 500 | — | Это не бизнес |
50 | 50 | 0 | 0 | Логично, программа работает, вводить частный случай не стал. |
1000 | 5 | 500 | 9 | Пройден |
30 | 15 | 500 | 21 | Пройден |
30 | 150 | 500 | 4 | Пройден |
5.556 | 49.04 | 193.6 | 9 | Пройден |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> double k, p, s, v, pk, m; // Переменные int main() { scanf("%lg%lg%lg", &k, &p, &s); // Вводим переменные if(k==0){ // Частный случай printf("%s", "No money - no honey"); }if(p==0){ // Частный случай printf("%s", "Это не бизнес"); } if((k>0)&&(p>0)){ // Основное while(pk<s){ v = k+pk; pk = pk + v*p/100; m++; } printf("%lg", m); // Ответ } return 0; } |
Решение выполняется с помощью цикла while, который выполняет циклы пока заданное условие правда (см. 12).
Алгоритм цикла:
- Цикл работает, пока сумма сложных процентов меньше, чем сумма.
1 |
while(pk<s) |
2. Т.к. процент сложный, то он должен изменяться с каждым циклом. Для этого я ввел вспомогательную переменную v.
1 |
v = k+pk; |
где k — капитал, pk — сумма сложных процентов.
- Делаем сумму сложных процентов
1 |
pk = pk + v*p/100; |
- Добавляем месяцы, пока pk не станет большей или равной s.
1 |
m++; |
Вывод: таким образом код работает независимо от того, какой капитал, какой процент или какая сумма. Не беря во внимание частные случаи, код для своей задачи универсален.
Частные случаи:
- Когда k = 0. Такая ситуация не имеет логического значения ни в коде, ни в жизни. По этому я её обыграл с помощью if. Код не работает
-
Когда p = 0. Аналогично первому, логики нет. Код не работает
-
Когда s = 0. В таком случае, магазин бесплатен. Код работает
* — работал в месяцах, так удобней, ибо месячный процент
А вообще, время 5 утра. А я только осознал, что у меня 1.16, а не 1.6. Но пусть будет =)
Это задание Вячеслава Иванова. Сверьте ответы 🙂