Задача. Голодная зима. Суточный рацион коровы составляет [latex]u[/latex] кг сена, [latex]v[/latex] кг силоса и [latex]w[/latex] кг комбикорма. В хозяйстве, содержащем стадо из [latex]k[/latex] голов, осталось [latex]s[/latex] кг сена, [latex]t[/latex] кг силоса и [latex]f[/latex] кг комбикорма.. В стаде ежедневно погибает [latex]p[/latex]% коров; ежедневно [latex]q[/latex]% оставшегося сена сгнивает; [latex]r[/latex]% силоса разворовывается колхозниками; [latex]t[/latex]% комбикорма распродает зав. фермой. Когда нельзя будет кормить всех оставшихся коров по полному рациону? Какой из видов кормов кончится раньше других?
Тесты:
u | v | w | k | s | t | f | p | q | r | h | Результат | Комментарий |
10 | 10 | 5 | 50 | 2000 | 1500 | 1000 | 2 | 5 | 2 | 2 | Через 2 дн. силос закончится. | Пройден |
15 | 10 | 10 | 50 | 1500 | 1500 | 1000 | 4 | 5 | 3 | 3 | Через 1 дн. сено закончится.
Через 1 дн. комбикорм закончится. |
Пройден |
10 | 5 | 5 | 50 | 2000 | 2000 | 2000 | 2 | 5 | 5 | 2 | Через 3 дн. сено закончится. | Пройден |
10 | 10 | 5 | 20 | 5000 | 4500 | 4000 | 39 | 5 | 2 | 2 | Через 3 дн. все коровы умрут. | Пройден |
Код на С
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <stdio.h> #include <math.h> int main(void) { //Определим суточный рацион double u,v,w; scanf ("%lf %lf %lf ", &u, &v, &w); //Определим остаток запасов и количество голов в стаде double k,s,t,f; scanf("%lf %lf %lf %lf",&k, &s, &t, &f); //Опередлим значения убытков double p,q,r,h; scanf("%lf %lf %lf %lf",&p, &q, &r, &h); int a=0; double z=round(0.01*p*k); // Количество коров, погибающих в день while ((s>=u*k)&&(t>=v*k)&&(f>=w*k)&&(k>0)) { a++; s-=(u*k+0.01*q*s); t-=(v*k+0.01*r*t); f-=(w*k+0.01*h*f); k-=z; } printf("Через %d дн. ",a); if (s<u*k) printf("сено закончится. \n"); if (t<v*k) printf("силос закончится .\n"); if (f<w*k) printf("комбикорм закончится .\n"); if (k<=0) printf("все коровы умрут. \n"); return 0; } |
Код на Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in=new Scanner(System.in); //Определим суточный рацион double u,v,w; u=in.nextDouble(); v=in.nextDouble(); w=in.nextDouble(); //Определим остаток запасов и количество голов в стаде double k,s,t,f; k=in.nextDouble(); s=in.nextDouble(); t=in.nextDouble(); f=in.nextDouble(); //Опередлим значения убытков double p,q,r,h; p=in.nextDouble(); q=in.nextDouble(); r=in.nextDouble(); h=in.nextDouble(); int a=0; double z=Math.round(0.01*p*k); // Количество коров, погибающих в день while ((s>=u*k)&&(t>=v*k)&&(f>=w*k)&&(k>0)){ a++; s-=(u*k+0.01*q*s); t-=(v*k+0.01*r*t); f-=(w*k+0.01*h*f); k-=z; } System.out.print("Через "); System.out.print(a+" дн. "); if (s<u*k) System.out.println("сено закончится."); if (t<v*k) System.out.println("силос закончится ."); if (f<w*k) System.out.println("комбикорм закончится ."); if (k<=0) System.out.println("все коровы умрут. "); } } |
Решение:
По условию задачи каждый день количество припасов меняется в зависимости от прошлодневного количества. В условии продолжения цикла указано допущение, что сперва еда дается коровам, а после количество ее уменьшается согласно заданным условиям (то есть, на сгнивание, разворовывание и продажу корма может и не хватить).
Допустим, что ежедневно умирает [latex]p[/latex]% от начального количества коров. Чтобы число коров было целым используем функцию round.
В программе введен счетчик дней, который увеличивается на каждом витке цикла, и по завершении указывает количество дней, на которые хватило припасов. После цикла путем сравнения определим какой из видов кормов закончится раньше, или проверим не погибнут ли все коровы.
С работой программы на С можно ознакомиться здесь, а на Java здесь.
Вторая строка в тестах кажется слишком высокой — нельзя удалить лишние пустые строки в ней?
Не совсем мне понятно что делать с коровами — неужели их будет оставаться нецелое число? Кроме того не совсем понятно «p% коров» от изначального числа коров или текущего на данный момент? А Вы как поняли?
В условии продолжения k!=0 — если Вы используете дробные числа, очень сомнительно, что останется ровно ноль коров, в любом случае, лучше заменить на условие k>0.
В тестах Вы не проверили случай «все коровы умрут \n» — а ведь Вы учли его в программе — значит нужно проверить работает ли эта часть программы.
Каким образом у Вас очутилось в строчке «printf(«Через %в дн. «,a);» запись %в не знаю, ведь на ideone все нормально записано. Нужно исправить опечатку.
Код исправлен. Тесты и решение дополнены.
Засчитано, 10 баллов.