Професионална програма
Loading...
kolioi avatar kolioi 612 Точки
Best Answer

Ето ти решение на C# https://pastebin.com/8cUDpDTq

и решение на C++ https://pastebin.com/1UGbw62B

И двете дават 100/100 точки в Джадж. Уловката тук е (и това не е споменато в условието!) когато има препълване, да отпечаташ с колко литра е прелял басейна само с една цифра след десетичната точка.

Също така, обърнете внимание на времето за изпълнение и големината на използваната памет от двете програмки:

C# Memory: 7.73 MB Time: 0.013 s

C++ Memory: 1.87 MB Time: 0.003 s

 

0
filip4o avatar filip4o 4 Точки

Благодаря за отговора, не бих се сетил така да го напиша, но не разбирам логиката зад втория (int)  в уравнението?

int x = (int)((V1 + V2) * 100.0 / V),

0
kolioi avatar kolioi 612 Точки

С израза (V1 + V2) / V изчисляваме каква част от басейна е напълнена и след това го умножаваме по 100 за да получим проценти. Тъй като резултата е реално число (double или float) с (int) го тайпкастваме (typecast/преобразуваме) към цяло число, иначе компилатора дава предупреждение (warning).

За cout.precision() виж примера в MSDN - двата случая когато се употребва (с и без fixed), какво връща и каква стойност има по подразбиране.

https://msdn.microsoft.com/library/0f9e0abc-f70f-49bc-aa1f-003859f56cfe.aspx#ios_base__precision

0
filip4o avatar filip4o 4 Точки

Разбрах къде греша, благодаря за насоките.

0
kolioi avatar kolioi 612 Точки

Ами ти почти го беше направил smiley

Само да допълня нещо за тайпкастването. Това, което аз съм направил се използва предимно в С. В С++ е по-добре да го направиш така int x = int( (V1 + V2) / V * 100 ) или така int x = static_cast<int>((V1 + V2) / V * 100).

Също така за форматиране на изхода в С се използва printf(), както и snprintf() (обаче избягвай да използваш sprintf()). Същите функции може да ги използваш и тук.

0
30/09/2017 19:35:04