Loading...
Angel_Kalinkov avatar Angel_Kalinkov 111 Точки

Problems for Champions - Part II - 01. Passion Days

Здравейте колеги! Вече три дни се мъча с тази задача и не мога да се справя!

Това е моето решение, а това мисля, че е решението от книгата. И двете дават търсения изход, но в Judge не минават последния тест. Пробвах какво ли не, но повече от 90/100 не мога да постигна. Установих, че моето решение минава последния тест, ако в

if (price.compareTo(money) <= 0) {
    money = money.subtract(price);
    purchasesCount++;
}

сменя знака в условието с <, но тогава "гърми" на шестия. Качих пет страници с варианти на решения в Judge и все същото.

Моля за вашите предложения и съвети!

 

Тагове:
0
Programming Basics 18/12/2017 23:53:21
ad2bg avatar ad2bg 123 Точки
Best Answer

ето част от моя код на C#, който работи - надявам се да ти помогне - условието ми там е: money < price || money == 0

 

                foreach (char action in command)
                {
                    if (action == '*') { money += 10; continue; }

                    decimal price = 0;
                    if (char.IsLetter(action) && char.IsUpper(action)) { price = 0.5m * (int)action; }
                    else if (char.IsLetter(action) && char.IsLower(action)) { price = 0.3m * (int)action; }
                    else if (action == '%') { price = money / 2; }
                    else { price = (int)action; }

                    if (money < price || money == 0) continue;

                    money -= price;
                    countPurchases++;
                }

0
Angel_Kalinkov avatar Angel_Kalinkov 111 Точки

Написах го така:

if (price.compareTo(money) < 0 || money.compareTo(new BigDecimal(0)) == 0) {
    money = money.subtract(price);
    purchasesCount++;
}

Написах го и така:

if (price.compareTo(money) < 0) {
    money = money.subtract(price);
    purchasesCount++;
}
if (money.compareTo(new BigDecimal(0)) == 0) {
    money = money.subtract(price);
    purchasesCount++;
}

Но и в двата случая стига лимита на паметта.

0
ad2bg avatar ad2bg 123 Точки

За съжаление не съм запознат с Java, така че не съм сигурен какво става в твоя код. Просто казвам, че моя код на C# дава 100/100. Сравни ги - може да има разлики и другаде.

0
ad2bg avatar ad2bg 123 Точки

Да не би да трябва да е така (не съм наясно с приоритетите на операциите в Java):  

if ( ( price.compareTo(money) < 0 ) || ( money.compareTo(new BigDecimal(0)) == 0 ) )
0
Angel_Kalinkov avatar Angel_Kalinkov 111 Точки

Най-накрая го измислих! Благодаря на колегата ad2bg, който даже се оказа градски smiley. Неговия код на C# ме накара да се замисля за това, че когато парите са 0, а още има символи за обхождане и някой от тях е %, ще се получи грешен резултат.

Това решение вече получава в Judge 100/100, както и коригираният вариант от книгата.

0
19/12/2017 00:38:25
ad2bg avatar ad2bg 123 Точки

Колега, ако сега записвате Tech Module и желаете заедно да дерзаем по него и занапред (като градски :) ) - телефона ми е в профила. Поздрави!

1
Angel_Kalinkov avatar Angel_Kalinkov 111 Точки

Естествено! Телефонът ти не е видим за мен, но ако се наложи ще ти пиша на e-mail.

0
ad2bg avatar ad2bg 123 Точки

Супер :)

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