Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

XuTkO avatar XuTkO 2 Точки

01. Array Statistics

Някой може ли да кажа защо ми дава 60/100. Два Runtime error-a. Моля само Java-ри, на C# минават решенията.

Задача: https://judge.softuni.bg/Contests/Practice/Index/581#0

Решение: https://pastebin.com/u4309jsK

Тагове:
0
Module: Java Advanced
Quake3 avatar Quake3 546 Точки

Здравей,

така и не можах да докарам 100%...
Пробвай с вход: 0 0 1
Два-та Runtime error-a, които виждаш са заради:
BigDecimal averageBig = new BigDecimal(sumBig).divide(new BigDecimal(input.length));
Ако го смениш с:
BigDecimal averageBig = new BigDecimal(sumBig).divide(new BigDecimal(input.length), MathContext.DECIMAL128);
(Runtime error) бива заменен от: (Incorrect answer) :))) Може би, проблемът е в броя знаци след запетаята.

https://stackoverflow.com/questions/4591206/arithmeticexception-non-terminating-decimal-expansion-no-exact-representable

0
27/04/2018 08:12:27
VasAtanasov avatar VasAtanasov 48 Точки

Проблемът явно е при закръглянето на average. И на мен ми дава 60/100 и какво ли не пробвах. Няма в условието до какво число се закръгля и явно деленето дава различни резултати тъй като double  не е точен тип и се получават разминавания в двата езика C# и Java. Грешката не е принас а при тези, които са писали задачата и не тестват на различните езици да видят какви резултати се получават ами са я пуснали ей така! Това не ми се случва за първи път!

0
MartinBG avatar MartinBG 4803 Точки

Ето работещо Java решение (може да фейлне за време на някой тест, ако Judge е натоварен).

Както правилно сте се досетили, проблемът е в закръглянето на числата, което се различава при C# и Java.

Тук съм описал по-подробно проблема и съм дал решение - метод, който се грижи за "правилното" обръщане на double към стринг. 

2
Quake3 avatar Quake3 546 Точки

Как изполвайки, по-горе описания метод, да получим C# like double, с примера от по-горе?
Вход 0 0 1 и в крайна сметка: double d = 1d / 3d; expected result: 0.33333333333333331
Тук добре е описано, защо завършваме с: ....1:

https://stackoverflow.com/questions/15330988/double-vs-decimal-rounding-in-c-sharp

Благодаря!

0
MartinBG avatar MartinBG 4803 Точки

1d / 3 (или 1d / 3d) в C# се отпечатва в конзолата като 0.333333333333333 - тест

В Java същата операция се отпечатва в конзолата с един знак повече (16 вместо 15 знака след десетичната запетая):  0.3333333333333333 - тест

doubleToStringCSharpLike метода, който съм дал по-горе, се грижи при такива входни данни (и не само) да получим стринг, който да е идентичен със стринга, който връща C#.

1
28/04/2018 15:25:06
Quake3 avatar Quake3 546 Точки

Как да си сложа мишката на променлива в дебъг, оттук нататък? :)
Благодаря!

0
28/04/2018 15:51:36
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.