Задача 02 - Тръби в басейн
Здравейте,
На моето решение ми дава 92/100. Не мога да намеря къде ми е грешката. Ако може за помощ.
решение: https://pastebin.com/0CTQC0Qy
условие: https://judge.softuni.bg/Contests/Practice/Index/179#1
Здравейте,
На моето решение ми дава 92/100. Не мога да намеря къде ми е грешката. Ако може за помощ.
решение: https://pastebin.com/0CTQC0Qy
условие: https://judge.softuni.bg/Contests/Practice/Index/179#1
Тази част от кода ми е искало да бъде в if-a {}
pipe1 = Math.Truncate(pipe1);
pipe2 = Math.Truncate(pipe2);
capacity = Math.Truncate(capacity);
percent = Math.Truncate(percent);
Колеги, ако може малко помощ и на мен. Judge дава 76/100. Не мога да открия грешка.
Ето го и кода:
import java.util.Scanner;
public class Pipes {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int v = Integer.parseInt(scanner.nextLine());
int p1 = Integer.parseInt(scanner.nextLine());
int p2 = Integer.parseInt(scanner.nextLine());
double h = Double.parseDouble(scanner.nextLine());
double vol1=h*p1;
double vol2=h*p2;
double totalvol=vol1+vol2;
double fullpercent=(totalvol/v)*100;
double percent1=(vol1/totalvol)*100;
double percent2=(vol2/totalvol)*100;
if (totalvol<=v){
System.out.printf("The pool is %d%% full. Pipe 1: %d%%. Pipe 2: %d%%.", (int)fullpercent, (int)percent1, (int)percent2);
}
else {
System.out.printf("For %.1f hours the pool overflows with %.1f liters.", h, totalvol-v);
}
}
}
Първо всички проценти се свеждат до цяло число - и във втората ти проверка процента трябва да е цяло число, а не %.1f.
Другото по-важно е че задачата е правена за C# и трябва да използваш Decimal Format за решение за Java за този процент във втората проверка:
Ето поправено твое решение: https://pastebin.com/vb3Fu4K5
Дано да съм помогнала :)
Разбира се че сте помогнали. Благодаря Ви.
Но все още не са ми ясни следните неща:
1. (int)fullpercent - това всъщност връща цялата част - тоест цяло число, без закръгляне от double. Което отговаря на това което казвате - процентите до цяло число. Както се изисква в условието. Предполагам съм прав ?
2. Във втората проверка няма проценти - там имаме часове и литри - и двете са числа с плаваща запетая и както е посочено в условието трябва да са закръглени до първия знак след десетичната запетая. Нещо което постигам с %.1f. Или бъркам ?
3. "задачата е правена за C#" - тука ме загубихте - нищо не ми говори това... а и не би ли следвало да си има решение и на Java ? И съответно judge да може правилно да го оцени ?
4. Decimal Format - казвате да позлвам това за проверката в else-a. Хубаво, но единствената разлика която виждам в резултата е че при мен връща примерно 2.5, с decimal 2,5 (при мен с точка, с decimal е запетая...ако не откривате разликата).
5. DecimalFormat("0.##") - това не форматира ли до втория знак ако има втора значеща цифра? И то закръгля, нещо което е подчертано в условието че не трябва да става... Или аз бъркам... поне така разбирам от примера даден в stackoverflow:
And the output will be
6. Има ли как в judge да видя грешните резултати ?
Test #4 (Incorrect answer)
Time used: 0.028 s
Memory used: 1.10 MB
Test #5 (Incorrect answer)
Time used: 0.024 s
Memory used: 1.10 MB
Test #12 (Incorrect answer)
Time used: 0.024 s
Memory used: 1.11 MB
Има ли как да се види какво точно е грешно ? Какъв е входа и очаквания изход примерно...?
7. System.out.printf("For %s hours the pool overflows with %.1f liters.", df.format(h), totalvol-v);
%s ми говори че df.format(h) e всъщност числото форматирано, но конвертирано в стринг ? Или бъркам ? Това обяснява запетаята по-горе....
8. Възможно ли е да ми дадете пример в който моето решение се дъни за да го видя ?
Въпреки горните ми размишления и неясности факт е че judge даде 100/100 на програмата с поправката....
Съжелявам ако въпросите ми ви звъчат тъпо, но нямам опит и искам да си обясня правилно нещата.
Хич не са ти тъпи въпросите, съвсем скоро и аз си ги задавах :)
Не знам дали ще успея да отговоря на всичките въпроси, но ще опитам:
1. Да, връща цяло число без закръгляне.
2. Грешката е моя, часове са (решавам друга задача...и докато превключа...:))....но в условието е казано да e число с плаваща запетая само за литрите, за часовете не е написано какво да ги правим :
·Aко басейнът се е препълнил – с колко литра е прелял за даденото време, число с плаваща запетая
3. Езиците C# и Java са много близки, но все пак имат разлика в синтаксиса мисля. Тази задача е от стар изпит, когато изпитите са били (мисля) само за C# и трябва допълнително нагаждане, така да се каже към Java. Питах и трейнъра за задачата и той ми каза същото.
4. Не мисля, че може да е със запетая в отпечатването. На мен никога не ми се е случвало, десетичната запетая тук е точката. Запетаята означава друго.
5. Да, форматира и закръгля до втория знак след запетаята и връща стринг. Това беше единственото, което ми пречеше на 100-те точки в Judge. Защо да е указано да не се закръгля? За часовете има условие единствено във Входа на потребителя, че трябва да е с плаваща запетая:
В първия случай от примера (df1) на stackoverflow ще сложи втори знак след запетаята, ако има такъв, а ако има повече от два ще закръгли до 2-ия.
При df2 - ще сложи нула след първия знак, ако нямаме втори такъв, след запетаята разбира се, а ако пак са повече от 2, ще ги закръгли.
Тук има хубава информация за Decimal format - https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html
Здравейте Вероника,
Каква е разликата в използването на Decimal Format и закръглянето с %.1f ? Имах същия проблем и преди да използвам DF в judge ми даваше само 76 от 100 ?