[Programming Basics] [C++] Тръби в басейн.
Кода дава в Judge 76/100. https://pastebin.com/kJdq0Dii
От два дни се опитвам да намеря решение, но без резултат, някой който има повече опит може ли да даде идея ?
Кода дава в Judge 76/100. https://pastebin.com/kJdq0Dii
От два дни се опитвам да намеря решение, но без резултат, някой който има повече опит може ли да даде идея ?
Ето ти решение на 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
Благодаря за отговора, не бих се сетил така да го напиша, но не разбирам логиката зад втория (int) в уравнението?
int x = (int)((V1 + V2) * 100.0 / V),
С израза (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
Разбрах къде греша, благодаря за насоките.
Ами ти почти го беше направил
Само да допълня нещо за тайпкастването. Това, което аз съм направил се използва предимно в С. В С++ е по-добре да го направиш така int x = int( (V1 + V2) / V * 100 ) или така int x = static_cast<int>((V1 + V2) / V * 100).
Също така за форматиране на изхода в С се използва printf(), както и snprintf() (обаче избягвай да използваш sprintf()). Същите функции може да ги използваш и тук.