Loading...
mihal.andonov avatar mihal.andonov 1 Точки

Toy Store гърми

Кода ми работи а пък ми дава 60/100?

 

import java.util.Scanner;

public class ToyShop {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        double ekskurzia = Double.parseDouble(scan.nextLine());
        int pyzeli = Integer.parseInt(scan.nextLine());
        int kukli = Integer.parseInt(scan.nextLine());
        int mecheta = Integer.parseInt(scan.nextLine());
        int minioni = Integer.parseInt(scan.nextLine());
        int kamioni = Integer.parseInt(scan.nextLine());

        double suma = (pyzeli * 2.60) + (kukli * 3) + (mecheta * 4.10) + (minioni * 8.20) + (kamioni * 2);
        int igrachki = (pyzeli + kukli + mecheta + minioni + kamioni);

        if (igrachki >= 50)
        {
            double discount = suma * 0.25;
            double cenasotstypka = suma - discount;
            double naem = cenasotstypka * 0.1;
            double pechalba = cenasotstypka - naem;

            if (pechalba >= ekskurzia)
            {
                double ostavat = pechalba - ekskurzia;
                System.out.printf("Yes! %.2f lv left.", ostavat);
            }


        }

        if (igrachki <= 49)
        {
            double naem2 = suma * 0.1;
            double pechalba2 = suma - naem2;
            if (pechalba2 <= ekskurzia)
            {
                double ostavat = ekskurzia - pechalba2;
                    System.out.printf("Not enough money! " + "%.2f lv needed.", ostavat);
            }

        }



    }
}
Тагове:
0
Module: Java Advanced
mihal.andonov avatar mihal.andonov 1 Точки

ДАВА МИ 60/100 В judge-a

и не мога да си открия грешката

0
svetoslav_0 avatar svetoslav_0 1009 Точки

Здравей!

Това, с което може да започнеш е един основен принцип в програмирането: разделянето на една голяма задача на няколко по-малки. Какво имам предвид - в твоя случай можеш да направиш всяка стъпка по отделно, докато ти смесваш всичко. Можеш да си направиш една отделна проверка дали играчките не са повече от 50, след което директно да промениш стойността на вече изчислената цена:

if (igrachki >= 50) {
    suma = suma - suma * 0.25;

    // Или ако използваш по-краткия начин
    suma *= 0.75;
}

Това, което следва е да се добави в сметките ни и цената за наема, която е независима от броя играчки, което означава, че не е необходимо да правиш още една проверка за бройката им, тъй като тези 10% така или иначе трябва да бъдат платени. Изваждаме цената за наема:

double naem = suma * 0.1;
suma = suma - naem;

Или по-съкратен вариант:

double naem =suma * 0.1;
suma -= naem;

Или дори още повече (но това вече граничи с прекалено нечетим код):

// Изваждаме 10% от сумата
suma *= 0.9;

Дотук добре. Извадихме където е нужно съответните стойности. Остава само да проверим дали парите ще стигнат. Забележи, че това също е отделен ход. Той ще се случи независимо от другите, така че не е необходимо да ги слагаме в проверки:

// "suma" или както е при теб - "pechalba", зависи как си кръщаваш променливите :)
if (suma >= ekskurzia)
{
    // Парите са достатъчни
}

Но това не е достатъчно. Необходимо е да проверим дали сумата не е по-малка от цената на екстурзията. Но тъй като това се явява точно обратена проверка на тази, която направихме току-що, не е необходимо да пишем следното:

// Работи, но не е особено рационално
if (suma < ekskurzia)
{
    // Парите не стигат
}

Вместо това можем да "кажем" какво да се случи във всички останали случай, освен този, който сме проверили:

// Работи и е по-красиво :)
else
{
   // Парите не стигат
}

Можеш да разгледаш мое старо решение тук:

https://github.com/svetoslav0/SoftUni/blob/master/Programming%20Basics%20-%20Exams/12.%20PB%20-%207%20May%202017/02.%20Toy%20Shop/02.%20Toy%20Shop.cs

Въпреки, че е на C#, ще схванеш за какво става дума :)

ПП: добра практика е да обръщаш внимание на начина, по който си кръщаваш променливите. Добре е да са на английски (или поне на един език, при теб някои за на английски, някои на български), също така да бъдат camelCase, което означава, че е добре отделните думи да бъдат написани слети една за друга, като всяка следваща започва с главна буква, освен първата, която е добре да бъде малка. Може сега да ти се струва като дреболия, но всъщност е доста важно.

1
15/09/2019 19:49:09
RadostinD avatar RadostinD 16 Точки

Здравей, 

Ще е добре да си прочетеш задачата внимателно.

“Ако поръчаните играчки са 50 или повече магазинът прави отстъпка 25% от общата цена”

В твоят код се стига до извода, че:

- ако играчките са повече или равни на 50, то тя ще отиде на екскурзия

- ако играчките са по-малко или равни на 49 - няма да има екскурзия

Трябва да провериш дали играчките са повече или равни на 50, ако е така - изваждаш 25%. 

Поздрави

0
mihal.andonov avatar mihal.andonov 1 Точки

оправих си кода и работи 100/100

 

import java.util.Scanner;

public class ToyShop
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);

        double ekskurzia = Double.parseDouble(scan.nextLine());
        int pyzeli = Integer.parseInt(scan.nextLine());
        int kukli = Integer.parseInt(scan.nextLine());
        int mecheta = Integer.parseInt(scan.nextLine());
        int minioni = Integer.parseInt(scan.nextLine());
        int kamioni = Integer.parseInt(scan.nextLine());

        double suma = (pyzeli * 2.60) + (kukli * 3) + (mecheta * 4.10) + (minioni * 8.20) + (kamioni * 2);
        int igrachki = (pyzeli + kukli + mecheta + minioni + kamioni);

        if (igrachki >= 50) {
            suma = suma * 0.75 ;
        }

            suma = suma * 0.9;

        if (suma >= ekskurzia) {
            double ostavat = suma - ekskurzia;
            System.out.printf("Yes! %.2f lv left.", ostavat);
        } else {
            double ostavat2 = ekskurzia - suma;
            System.out.printf("Not enough money! %.2f lv needed.", ostavat2);

        }

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