Loading...
evittlyemov avatar evittlyemov 4 Точки

Задача от межд. изпит 26,03,2016 - Зелечукова борса, проблем при тест 06 в Judge

Здравейте,

успях да се справя със задачата за зеленчуковата борса, писана на Java, но когато я пусна в Judge, ми дава грешен отговор на Тест 06. Не мога да разбера какъв конкретно тест прави. Прилагам линк към кода, моля погледнете го и кажете къде греша. Задавам правилни данни и си смята правилно, задавам грешни такива и си излиза съобщението, което съм написал при грешен инпут...

http://pastebin.com/epwyUAvq

Ето го и условието:

1.*Зеленчукова борса

Първа задача от междинния изпит на 26 март 2016. Тествайте решението си тук.

Градинар продавал реколтата от градината си на зеленчуковата борса. Продава зеленчуци за N лева на килограм и плодове за M лева за килограм. Напишете програма, която да пресмята приходите от реколтата в евро ( ако приемем, че едно евро е равно на 1.94лв).

Вход

От конзолата се четат 4 числа, по едно на ред:

  • Първи ред – Цена за килограм зеленчуци – число с плаваща запетая
  • Втори ред – Цена за килограм плодове – число с плаваща запетая
  • Трети ред – Общо килограми на зеленчуците – цяло число
  • Четвърти ред – Общо килограми на плодовете – цяло число

Ограничения: Всички числа ще са в интервала от 0.00 до 1000.00

Изход

Да се отпечата на конзолата едно число с плаваща запетая: приходите от всички плодове и зеленчуци в евро.

0
Programming Basics
ThePSXHive avatar ThePSXHive 436 Точки
Best Answer

Виж вторият пример - форматирането се осъществява до 13-тия знак след дес. запетая. Твоят изход трябва да включва и коректното извеждане на подобна стойност.

System.out.format("%.13f%n", totalEUR);

Както вече разбираш, Judge-e не се нуждае от предварително дефинирани проверки за коректност на данните. В някои случаи е дори още по-капризен, така че не включвай елементи, които не са изрично упоменати в условието, но все пак е похвално, че изпипваш детайлите по този начин, и се досещаш за тях.

1
17/01/2017 21:00:49
evittlyemov avatar evittlyemov 4 Точки

Благодаря, сега опитах с този принт и ми даде 100/100.

За мен условието е подвеждащо като се казва, че има ограничение - числата да бъдат между 0;1000, едновременно с това при тест 06, ми подава число над 1000 и очаква програмата да продължи. Когато изтрих иф-елс, при зададени данни : 

999.999
1929212
75
23

Програмата ми дава отговор 2,29.., което очевидно е грешен отговор. След като смених принта вече ми смята вярно, преди това го е закръгляло с E-та.

0
AleksandarZahariev avatar AleksandarZahariev 2 Точки

Задачата може да се реши и без if. Пробвай да я измислиш така, ще ти е много по-лесно.

0
evittlyemov avatar evittlyemov 4 Точки

Аз If-а го слагам, заради ограничението 0,00;1000. Сега ще се разтърся да видя друг начин да ги огранича.

0
StefkaVasileva avatar StefkaVasileva 250 Точки

Изчисли общо приходите от всички плодове и зеленчуци в лева и едва след това ги превърни в евро.

0
evittlyemov avatar evittlyemov 4 Точки

Така съм го направил.

0
StefkaVasileva avatar StefkaVasileva 250 Точки

Съжелявам, малко се обърках заради if-овете защото не са нужни. Може да е от типа данни, тъй като на C# когато става въпрос за пари се използва decimal защото е с по-голяма точност.За жалост не съм писала много на Java и не мога да ти помогна, погледнах, че съм решавала задачата преди време, но и аз имам 90/100. Това е моето решение:

import java.util.Scanner;

/**
 * Created by StefkaVasileva on 10/5/2016.
 */
public class VegetablesMarcet {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        double priceVeg= Double.parseDouble(console.nextLine());
        double priceFru= Double.parseDouble(console.nextLine());
        int kgVeg= Integer.parseInt(console.nextLine());
        int kgFru= Integer.parseInt(console.nextLine());

        double totalPriceInBgn=(priceFru*kgFru)+(priceVeg*kgVeg);
        double totalPriceInEuro=totalPriceInBgn/1.94;

        System.out.println(totalPriceInEuro);
    }
}

0
VanessaShopping avatar VanessaShopping 48 Точки

По условие "Ограничения: Всички числа ще са в интервала от 0.00 до 1000.00" . Това за мен ще рече ,че няма да има други числа извън диапазона. Ако това е вярно не ти трябват иф-елс . 

Съвет: Давай смислени имена на променливите.

 

Тази задача съм я решил по същия начин но на c#.  На твоето решение промених двете променливи , за килограмите, на double, но пак гърми на този тест. Изтрих и коментарите , че ми се е случвало да правят проблем. Въпреки ,че Judge-a има Checker: Last Number Checker . Аз не виждам проблем в решението.

double vegetablePrice = double.Parse(Console.ReadLine());
            double fruitPrice = double.Parse(Console.ReadLine());
            double vegetableKg = double.Parse(Console.ReadLine());
            double fruitKg = double.Parse(Console.ReadLine());

            double vegetableSum = vegetablePrice * vegetableKg;
            double fruitSum = fruitPrice * fruitKg;

            double totalSum = vegetableSum + fruitSum;

            double euroSum = totalSum / 1.94;

            Console.WriteLine(euroSum);

 

0
17/01/2017 20:32:50
evittlyemov avatar evittlyemov 4 Точки

Малко е подвеждащо, защото за мен това си е ограничение, което трябва да го сложим в кода на програмата. Ще ги разкарам и ще го пусна да видим.

0
evittlyemov avatar evittlyemov 4 Точки

Не, пак ми дава грешка на същия тест. :/

0
evittlyemov avatar evittlyemov 4 Точки

Имената на променливите съм ги слагал според условието и за това и има коментари, да не се бърка. Пробвах и аз да сменям типовете, програмката си работи ама гърми на този тест. Изтрих Иф-елс, коментари, общо взето всичко, което е излишно и пак гърми там.

0
g_todorov avatar g_todorov 106 Точки

Здравей колега, 

поствам тук моето решение работещо на 100/100, с уговорката, че е на C#. Тъй като малко съм се занимавал със PHP и стигам до извода, че много от структурите си приличат в различните езици и предполагам, че би могло да ти помогне при Java.

http://pastebin.com/es46unFS

0
evittlyemov avatar evittlyemov 4 Точки

Благодаря,

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

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