Loading...
fpetrov8906 avatar fpetrov8906 3 Точки

Задача 02 - Тръби в басейн

Здравейте,

 

На моето решение ми дава 92/100. Не мога да намеря къде ми е грешката. Ако може за помощ.

решение: https://pastebin.com/0CTQC0Qy

условие: https://judge.softuni.bg/Contests/Practice/Index/179#1

Тагове:
0
Programming Basics
fpetrov8906 avatar fpetrov8906 3 Точки

Тази част от кода ми е искало да бъде в if-a {}

pipe1 = Math.Truncate(pipe1);

pipe2 = Math.Truncate(pipe2);

capacity = Math.Truncate(capacity);

percent = Math.Truncate(percent);

0
st.penchev avatar st.penchev 3 Точки

Колеги, ако може малко помощ и на мен. 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);
           
         }

    }


}
 

0
veronikaaa86 avatar veronikaaa86 365 Точки

Първо всички проценти се свеждат до цяло число - и във втората ти проверка процента трябва да е цяло число, а не %.1f.

Другото по-важно е че задачата е правена за C# и трябва да използваш Decimal Format за решение за Java за този процент във втората проверка:

else {             
DecimalFormat df = new DecimalFormat("0.##");
System.out.printf("For %s hours the pool overflows with %.1f liters.", df.format(h), totalvol-v);

Ето поправено твое решение:  https://pastebin.com/vb3Fu4K5

Дано да съм помогнала :)

 

0
st.penchev avatar st.penchev 3 Точки

Разбира се че сте помогнали. Благодаря Ви.

Но все още не са ми ясни следните неща:

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:

public static final DecimalFormat df1 = new DecimalFormat( "#.##" );
public static final DecimalFormat df2 = new DecimalFormat( "#.00" );

System.out.println(df1.format(7.80));
System.out.println(df1.format(85));
System.out.println(df1.format(85.786));

System.out.println(df2.format(7.80));
System.out.println(df2.format(85));
System.out.println(df2.format(85.786));

And the output will be

7.8
85
85.79

7.80
85.00
85.79

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 на програмата с поправката....

Съжелявам ако въпросите ми ви звъчат тъпо, но нямам опит и искам да си обясня правилно нещата.

 

 

0
veronikaaa86 avatar veronikaaa86 365 Точки

Хич не са ти тъпи въпросите, съвсем скоро и аз си ги задавах :)

Не знам дали ще успея да отговоря на всичките въпроси, но ще опитам:

1. Да, връща цяло число без закръгляне.

2. Грешката е моя, часове са (решавам друга задача...и докато превключа...:))....но в условието е казано да e число с плаваща запетая само за литрите, за часовете не е написано какво да ги правим : 

·Aко басейнът се е препълнил – с колко литра е прелял за даденото време, число с плаваща запетая

  • "For [x] hours the pool overflows with [y] liters."

3. Езиците C# и Java са много близки, но все пак имат разлика в синтаксиса мисля. Тази задача е от стар изпит, когато изпитите са били (мисля) само за C# и трябва допълнително нагаждане, така да се каже към  Java. Питах и трейнъра за задачата и той ми каза същото.

4. Не мисля, че може да е със запетая в отпечатването. На мен никога не ми се е случвало, десетичната запетая тук е точката. Запетаята означава друго.

5. Да, форматира и закръгля до втория знак след запетаята и връща стринг. Това беше единственото, което ми пречеше на 100-те точки в Judge. Защо да е указано да не се закръгля? За часовете има условие единствено във Входа на потребителя, че трябва да е с плаваща запетая:

  • Четвъртият ред съдържа числото H – часовете които работникът отсъства – число с плаваща запетая в интервала [1.0…24.00]

 

В първия случай от примера (df1) на stackoverflow ще сложи втори знак след запетаята, ако има такъв, а ако има повече от два ще закръгли до 2-ия.

При df2 - ще сложи нула след първия знак, ако нямаме втори такъв, след запетаята разбира се, а ако пак са повече от 2, ще ги закръгли.

Тук има хубава информация за Decimal format - https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

 

 

1
27/09/2017 20:01:56
veselin1985 avatar veselin1985 0 Точки

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


Каква е разликата в използването на Decimal Format и закръглянето с %.1f ? Имах същия проблем и преди да използвам DF в judge ми даваше само 76 от 100 ?

 

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