Софтуерно Инженерство
Loading...
fiherLuci avatar fiherLuci 219 Точки

Тръби в басейн . Междинен тест 26 Март

Като правих теста тази задача ми даде 93 точки . Сега видях даденото решение видях и моето решение и не мога да разбера защо моето решение не работи и в кой случай не работи . Ще постна моето решение и официалното решение ,но бих искал да попитам възможно ли е да се видят тестовете на judge-а ,защото ми е интересно къде гърми . 

Условие - http://prntscr.com/as5e9e

Моето решение ,което сега ми изглежда куцо - http://pastebin.com/V7ZiFGtK

Официалното решение - http://pastebin.com/zDNJV8Kp

 

Основната разлика е използването на Math.Truncate вместо кастване към int ,но пак не разбирам къде бъркам и не мога да дебъгна ,защото не знам входните данни . 

Ако някой се интересува по-подробно може да отиде на judje - Coding 101 - Exam 26 Mart - Задача 02 Тръби в Басейн .

pilieva avatar pilieva 4 Точки

Здравейте, 

може ли някой да ми помогне. Не мога да разбера къде греша. Judge ми дава 93 / 100. 

https://pastebin.com/yPyapALN

Благодаря!

0
pilieva avatar pilieva 4 Точки

Намерих си грешката, в else-а за отпечатваяне на текста вместо  %.0f  сложих %f. Сега резултата в Judge  е 100 / 100. 

0
03/09/2017 10:32:48
setahari avatar setahari 0 Точки

Някой  може ли да  даде код който да  дава 100/100 официалния код ми дава 69/100 .Благодаря!!!

0
JivkoJelev avatar JivkoJelev 200 Точки

Дай твоя код , ще ти го редактирам и хем ще си видиш грешката.

0
mirenna_i avatar mirenna_i 0 Точки

И аз имам нужда от помощ. Извъртях 30 варианта и не мога да надскоча 76/100. Може ли някой да каже защо?

int volume = Integer.parseInt(console.nextLine());
int debit1 = Integer.parseInt(console.nextLine());
int debit2 = Integer.parseInt(console.nextLine());
double hours = Double.parseDouble(console.nextLine());
double pipe1Volume = hours * debit1;
double pipe2Volume = hours * debit2;
double fullVolume = pipe1Volume + pipe2Volume;

if (volume >= fullVolume){
    double fullPercent = Math.floor(fullVolume / volume * 100);
    double pipe1Percent = Math.floor(pipe1Volume / fullVolume * 100);
    double pipe2Percent = Math.floor(pipe2Volume / fullVolume * 100);

    System.out.printf("The pool is %.0f%% full. Pipe 1: %.0f%%. Pipe 2: %.0f%%.\n", fullPercent, pipe1Percent, pipe2Percent);
} else {
    double overVolume = fullVolume - volume;

    System.out.printf("For %.1f hours the pool overflows with %.1f liters.\n", hours, overVolume);
}
0
JivkoJelev avatar JivkoJelev 200 Точки

Пробва ли с Math.Truncate вместо Math.floor?

0
mirenna_i avatar mirenna_i 0 Точки

Мерси за предложението, но в Java няма функция Math.Truncate (за разлика от .NET). В допъление, разликата между .floor и .Trunkate (според Google) е в отрязването само при отрицателни стойности, което в задачата, мисля не е възможно. 

 

0
Veli94 avatar Veli94 0 Точки
За часовете трябва да направиш DecimalFormat.


DecimalFormat df = new DecimalFormat("0.##");
System.out.printf("For %s hours the pool overflows with %.1f liters." ,df.format(hours) ,overflow );
0
pilieva avatar pilieva 4 Точки

Промених кода ти спрямо предложението на Veli94, сега вече дава 100/100 в judge. 

https://pastebin.com/yFTciQfv

0
27/10/2017 14:41:11
mirenna_i avatar mirenna_i 0 Точки

Благодаря, вече се получи. Конзолата ми изпечатваше с десетична точка, а с този формат ми дава десетична запетая. Явно с този формат взема настройките за език на компютъра.

0
SZahariev avatar SZahariev 4 Точки

Здравейте, някой може ли да ми каже защо ми дава 76/100 точки? Имам съмнение, че е защото трябва да се използва souf, но не съм сигурен.

 


import java.util.Scanner;

public class excercises {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int v = Integer.parseInt(console.nextLine());
        int p1 = Integer.parseInt(console.nextLine());
        int p2 = Integer.parseInt(console.nextLine());
        double h = Double.parseDouble(console.nextLine());
        double pipe1 = (p1 * h);
        double pipe2 = (p2 * h);
        double pool =((pipe1 + pipe2) / v) * 100;
        Integer pool1 = (int) pool;
        double pipe1Percent = (pipe1 / (pipe1 + pipe2)) * 100 ;
        Integer pipe1Percent1 = (int) pipe1Percent;
        double pipe2Percent = (pipe2 / (pipe1 + pipe2)) * 100 ;
        Integer pipe2Percent2 = (int) pipe2Percent;

        if ((pipe1 + pipe2) <= v){
            System.out.println("The pool is" + " " + pool1 + "%" + " " + "full." + " " + "Pipe 1: " + pipe1Percent1 + "%." + " " + "Pipe 2: " + pipe2Percent2+ "%." );
        } else {

            System.out.println("For" + " " + h + " " + "hours the pool overflows with" + " " + ((pipe1 + pipe2) - v) + " " + "liters.");
        }


    }
}

0
inkarnasion avatar inkarnasion 127 Точки

Освен че трябва да използваш printf ти трябва и decimal format за да ти излезне коректно сметката.

1
SZahariev avatar SZahariev 4 Точки

Благодаря! Оправих го.

0