Задача Phone Bill

Hey,

Опитвам се да реша Phone Bill и получавам 4/5 , като грешния отговор е отрицателно число , по принцип това не би трябвало да е възможно, понеже

Scanner Input = new Scanner(System.in);
int messages = Input.nextInt();
int minutes = Input.nextInt();

if (messages <= 20 && minutes <= 60 || messages<=0 && minutes<=0 ) {
System.out.println(“0 additional messages for 0.00 levas”);
System.out.println(“0 additional minutes for 0.00 levas”);
System.out.println(“0.00 additional taxes”);
System.out.println(“12.00 total bill”); }

(и след това е кода за екстра минутите и там допълнителните сметки)

и не разбирам как след това може да се получи отрицателно число. а и в останалите 4 case-са работи правилно

Здравей,

Не съм сигурна как продължава решението ти и ми е трудно да предположа от къде идва грешката :slight_smile:

От този код виждам, че си взела предвид ситуацията когато получиш минути и съобщения в рамките на безплатните. Ако след това смяташ допълнителните сметки, сигурна ли си, че си тествала ако имаш минути в плана и съобщения в повече, както и обратно?

Успех,
Надя

1 Like

Мерси много , открих си грешката ^^

1 Like

Здравейте,
Дава ми 4/5 и не мога да открия грешката си. Моля за съдействие.
Кода ми е:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    double totalMessages = Double.parseDouble(scanner.nextLine());
    double totalMinutes = Double.parseDouble(scanner.nextLine());
    double additionalMinuteCost = 0.10 * 1.2;
    double additionalMessageCost = 0.06 * 1.2;
    double additionalMinutes = totalMinutes - 60;
    double additionalMessages = totalMessages - 20;
    double totalCost = 12.0;
    double additionalTaxes = ((additionalMessages) * 0.06 + (additionalMinutes) * 0.1) / 5;
    if (totalMessages > 20) {
        totalCost += (totalMessages - 20) * additionalMessageCost;
    }
    if (totalMinutes > 60) {
        totalCost += (totalMinutes - 60) * additionalMinuteCost;
    }
    if (additionalMessages <0){
        additionalMessages = 0;
    }
    if (additionalMinutes <0){
        additionalMinutes = 0;
    }
    if (additionalTaxes<0) {
        additionalTaxes = 0;
    }
    System.out.printf("%.0f additional messages for %.2f levas%n", additionalMessages, additionalMessages * 0.06);
    System.out.printf("%.0f additional minutes for %.2f levas%n", additionalMinutes, additionalMinutes * 0.1);
    System.out.printf("%.2f additional taxes%n", additionalTaxes);
    System.out.printf("%.2f total bill", totalCost);
}

}

Виж каква грешка ти дава Judge като аутпът. Най-вероятно е нещо при принтирането.

Дава ми това съобщение.
Как да го интерпретирам?

Виж реда 0 additional minutes for 0.

Не ти ли прави нещо впечатление? Сравни го с примерния аутпът от judge. :slight_smile:

Нищо не ми прави впечатление :slightly_smiling_face:
Щях ли иначе да питам?

Точката след 0?

здравей,
пробвай с примерен вход, където
смси = 25 (давам тази цифра, защото явно тя е г грешния ти тест)
минути < 60 - тук се появява грешно изчисление в additional taxes логиката ти

пробвай примерно при вход:
25
59

ти изкарваш :
5 additional messages for 0.30 levas
0 additional minutes for 0.00 levas
0.04 additional taxes —> а трябва да е 0.06
12.36 total bill

а при вход:
25
0

ти изкарваш:
5 additional messages for 0.30 levas
0 additional minutes for 0.00 levas
0.00 additional taxes —>>> пак трябва да е 0.06
12.36 total bill

и тн
дебъгни, виж къде се чупи и го оправи.

успех! :slight_smile:

Видях къде ми се чупи логиката.

Благодаря, Денски :slight_smile:

1 Like

Здравейте и от мен,

и на мен ми куца едно решение на тази задача. Подобно на колегата Иванов, джъджът ми показва:
image

а кодът ми е следния:

Нещо бъркам и аз, когато минути нямам а СМС-ите са 5+.

Ще съм безкрайно благодарна, на този който може да удари рамо…

Здравей, не съм сигурен, но на пръв поглед виждам, че си изключила случая когато съобщенията и минутите са равни. Т.е. >=60 , >=20

Здравей и мерси за отговора.
Програмата работи с 20 смс-и и 60мин. Показва 12лв сметка.
Просто това равенство минава в else, демек при последния принт.

И все пак някъде греша :slight_smile:

Здравей,

При следните входни данни:

25
0

Програмата ти показва:

5 additional messages for 0.30 levas 
0 additional minutes for 0.00 levas  
1.26 additional taxes  
19.56 total bill

А би трябвало да показва:

5 additional messages for 0.30 levas
0 additional minutes for 0.00 levas
0.06 additional taxes
12.36 total bill

Обърни внимание, че данъците са 20% от допълнителните 0.30 лева, което е 0.06.

Пиши пак, ако не се получава.

Поздрави,
Петър

1 Like

Пак ме спасяваш :slight_smile:

Мерси, колега, имаме го:
image

Малко дървено го редактирах, но важното е че работи:

Хубав ден!
Алекс

Здравейте,

На лаптопа програмата ми работи, но в judge ми дава 2/5. Най-вероятно имам проблем с принтирането, но не си намирам грешката.
Това е кодът ми: https://pastebin.com/cG0r1yLR
Благодаря за съдействието!

Здравей,

на редове 33 и 44
Console.WriteLine(“0 additional taxes”);

"0 additional taxes" не е съобщението, което ти трябва, а "0 additional minutes (или съответно messages) for 0.00 levas"

Успех :slight_smile: