Loading...
miro7975 avatar miro7975 2 Точки

Задача02 Тръби в басейн Exam 26March2016

Дали някой би могъл да предложи решение на въпросната задача, само че да е на Java, и да взима 100 точки в джъджа. Моето решение, което давам по-долу, получава 73 точки. Проблемът е, че при някои тестове моя код принтира стойности от тип дабъл с излишни нули след запетайката. Например при вход със стойности 100, 100, 100, 2.5 (това е тест 2) очакваният изход е "For 2.5 hours the pool overflows with 400 liters",а  моят изход е "For 2.5 hours the pool overflows with 400.0 liters."

import java.util.Scanner;
 
public class PoolPipes2
{
    public static void main( String[] args )
    {
        Scanner input = new Scanner(System.in);
         
        
        int v = Integer.parseInt(input.nextLine());
        int p1 = Integer.parseInt(input.nextLine());
        int p2 = Integer.parseInt(input.nextLine());
        double h = Double.parseDouble(input.nextLine());
        
        double actualLitres = (p1+p2)*h;
        
        
        if(actualLitres <= v)
        {
            double percentagePool = Math.floor((actualLitres/v)*100);
            double percentageP1 = Math.floor((p1*h/actualLitres)*100);
            double percentageP2 = Math.floor((p2*h/actualLitres)*100);
            int per100Pool =  (int) percentagePool;
            int per100P1 = (int) percentageP1;
            int per100P2 = (int) percentageP2;
            System.out.printf("The pool is %d%% full. Pipe 1: %d%%. Pipe 2: %d%%.%n",

                                                                                per100Pool,  per100P1,  per100P2);
        }
        else
        { 
            double overflow = actualLitres - v;
            System.out.printf("For %.1f hours the pool overflows with %.1f liters.%n", h , 
                                                                            overflow);
        }
    }
}

 

 

Тагове:
0
Programming Basics 16/07/2016 00:57:05
koksibg avatar koksibg 892 Точки

Здравей, и аз като теб сега се уча само, че на C#, и тази задача съм я решил.

Като гледам имаш двойно преобразуване  :

double percentagePool = Math.floor((actualLitres/v)*100);

int per100Pool =  (int) percentagePool;

Според мен няма смъсъл - Math.floor закръгля до по- малката или равна стойност на числото :

напр:

Math.floor(60984.1)=60984.0
Math.floor(-497.99)=-498.0
Math.floor(0)=0.0

След като закръглиш чак тогава преобразуваш в int.

Премахни навсякъде Math.floor, и си виж форматирането на двата изхода:

пояснение:

https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

 

0
16/07/2016 03:56:52
vancho avatar vancho 430 Точки

Видях, че даваш %.1f (така му казваш че искаш винаги да ти принтира до първият знак след точката) - задай му само %f. Или може да пробваш с DecimalFormat - и стойноат в скобите "0.#########". Той връща String и ако има само нули след десетичната запетая, ще ти върне цяло число като стойност. Надявам се съм разбрал правилно проблема ти. По късно може да се разровя да видя да ли съм я решавал и да ти дам решение.

-1
16/07/2016 10:00:00
vancho avatar vancho 430 Точки

Ето моето решение 100 от 100 е. Не съм я решавал на Java, но я имах на C# и преправих за Java. Какато ти писах по-рано DecimalFormat оправя нещата. Принципно тези задачи са писани главно за C#. Поздрави. ЛИНК

-1
vancho avatar vancho 430 Точки

Ето моето решение 100 от 100 е. Не съм я решавал на Java, но я имах на C# и го преправих за Java. Както ти писах по-рано DecimalFormat оправя нещата. Принципно тези задачи са писани главно за C#. Поздрави. ЛИНК

упс...сега видях...форматирането на кода е на C#, но ще се оправиш...

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