Проблем със Задача 06. Монети от Изпита Основи на програмирането 7 Януари 2018
Здравейте!
Ако може някой да помогне.. Не мога да си открия грешката в Задача 06. Coins от тук. Judge ми дава 90/100.
Моето решение https://pastebin.com/kWwAxSFB.
Здравейте!
Ако може някой да помогне.. Не мога да си открия грешката в Задача 06. Coins от тук. Judge ми дава 90/100.
Моето решение https://pastebin.com/kWwAxSFB.
Най-вероятно трябва да използваш по-големи променливи.
Когато не са указани допустими стойности на входа при изпитните задачи е много верятно да има няколко входа с много големи числа, които лесно могат да прехвърлят обема на типове като int и float (32 bits). За по-сигурно винаги ползвай по-големи типове като long и double (64 bits).
Логически решението е добре, но има два основни проблема. От една страна не е хубаво да се пишат на един ред толкова много операции, защото това затруднява четимостта, а от друга страна ненужно се повтарят едни и същи изчисления.
Ето един алгоритъм, при който се използва една малка зависимост в стойността на монетите -
2лв, 1лв -> 20ст, 10ст -> 2ст., 1ст. и 50ст., 5ст.
https://pastebin.com/HwFsjw2e
Разбира се, на изпит е по-трудно да се сетиш за подобен алгоритъм, освен ако имаш достатъчно време.
Има и друг по-лесен начин на решение на задачата с помоща на метод:
https://pastebin.com/ZGVvGde4
Здравейте,
Моят проблем е аналогичен -jugde дава 90/100 т. на решение на Java.Конструирането на решението ми е с по-различна логика. Използвах съветите за използване на decimal format, и мисля че тестовете за 1.88, 3.01, 2.01 минават, но все пак не намирам грешката. Благодаря предварително.
Моето решение https://pastebin.com/VkM6RUxz
С твоето решение и decimal format не е нужно да използваш, грешката ти е на ред 40.. вместо >10 .. сложи >=10.
Благодаря
Дали някой може да даде съвет за този проблем на C++. Какво да ползваме вместо int и double, така че и Visual Studio, и judge да го приемат ?
Опитай с decimal
В C/C++ няма decimal.
Ето ти едно решение на C++ с масив (не знам дали сте учили) https://pastebin.com/nTEKJrAj
и без масив https://pastebin.com/LgjiJh3z
Проблема тук е в закръгляването, както е посочил borkins
Ако заменя този ред
amount = money * 100 - amount * 100;
с това
amount = (money - amount) * 100;
и гърмят два теста - седми и осми.
Така че проблема с тази задача не е в езика за програмиране (C++,C#,Java).
Супер, благодаря!
Благодаря за отговора и за алтернативните решения!
Използването на по-големи променливи (long и double) даде същия резултат 90/100.
Проблема е тук (при входове: 2.01, 3.01...):
Получава се следното:
1. 2.01 - 2 = 0.009999999999999787 (вместо 0.01)
2. 0.009999999999999787 * 100 = 0.9999999999999787
3. (long) 0.9999999999999787 = 0
4. coins = 0
Т.е. губи се една монета (в случая - 1 стотинка).
Ето един метод за решение на проблема с DecimalFormat за конверсия към C# double (може да го ползваш и за други подобни задачи:
Доколкото разбирам тези задачи са написани за С#, за да се решат със Java трябва да се използва DecimalFormat. С DecimalFormat и моето решение минава със 100/100 - само че не е най-удачното решение :).
Ще си позволя да цитирам отговора който получих от Цветомир Марков относно задачата: