Помощ при задача - Calculate Change / [Workshop] Conditional Statements

Здравейте, имам въпрос към задачата Calculate Changes от подготовката. Изпробвам различни стойности и работи, но когато я submit-на ми дава 4/5 - 80/100, тоест някъде нещо греша. Бихте ли ми помогнали, за да знам къде е грешката и да я поправя? Как мога да изпратя кода на задачата,който съм написал,за да Ви поясня?

Благодаря предварително,
весели празници!

1 Like

Здравей,
Когато принтираш броя на монетите от една стотинка желаният резултат е:

1 x 1 stotinka

ти принтираш:

1 x 1 stotinki

ПП
Код можеш лесно да споделяш чрез този сайт:

1 Like

Много съм благодарен за помощта. Лек ден

Здравейте,
Получавам резултат 3/5. Някъде бъркам. Моля за съдействие.

Това е кода:
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    double price = Double.parseDouble(scanner.nextLine());
    double money = Double.parseDouble(scanner.nextLine());
    double change = money - price;
    double levs = 0, stotinki50 = 0, stotinki20 = 0, stotinki10 = 0, stotinki5 = 0, stotinki2 = 0, stotinki1 = 0;
    if (change >= 1) {
        levs = Math.floor(change / 1);
        System.out.printf("%.0f x 1 lev%n", levs);
        change = change - levs;

    }
    if (change >= 0.50) {
        stotinki50 = Math.floor(change / 0.50);
        System.out.printf("%.0f x 50 stotinki%n", stotinki50);
        change = change - stotinki50 * 0.5;
    }
    if (change >= 0.20) {
        stotinki20 = Math.floor(change / 0.20);
        System.out.printf("%.0f x 20 stotinki%n", stotinki20);
        change = change - stotinki20 * 0.2;
    }
    if (change >= 0.10) {
        stotinki10 = Math.floor(change / 0.10);
        System.out.printf("%.0f x 10 stotinki%n", stotinki10);
        change = change - stotinki10 * 0.1;
    }
    if (change >= 0.050) {
        stotinki5 = Math.floor(change / 0.05);
        System.out.printf("%.0f x 5 stotinki%n", stotinki5);
        change = change - stotinki5 * 0.05;
       
    }
    if (change >= 0.02) {
        stotinki2 = Math.floor(change / 0.02);
        System.out.printf("%.0f x 2 stotinki%n", stotinki2);
        change = change - stotinki2 * 0.02;
    }
    if (change >= 0.01) {
        stotinki1 = Math.floor(change / 0.01);
        System.out.printf("%.0f x 1 stotinka%n", stotinki1);
        change = change - stotinki1 * 0.01;
    }


}

}

1 Like

Здравей,
ето ти примерни input-и, при които ти изкарваш грешен резултат:

1.01
2


1.02
2

дебъгни и виж на коя сметка се чупи. И на мен ми беше взела здравето тази задача :slight_smile:

Успех!

1 Like

Здравей Julian,

Проблема идва от закръглянето на double, необходимо да правиш операции само с цели числа понеже след няколко закръгляния double заместо да е 0.01 лв приема стойност 0.009999999999 и цялата ти задача пропада.

Направи следното, умножи change * 100 и следвай същата логика. Заместо 1 използвай 100, заместо 0.50 използвай 50 и т.н.

Поздрави,
Мишо

Иползвай следния цикъл за да видиш разликата:

double sum = 0.0;
for (int i = 1; i <= 10; i++)
{
sum += 0.1;
}
Console.WriteLine("{0:r}", sum);
Console.WriteLine(sum);

при очаква резултат 1, ние получаваме “0.99999999999999989”.

Благодаря ви за съдействието :slight_smile:

Благодаря! Спести ми голямо главоблъскане с тези два входа. 100/100 заради тях!!!

1 Like