Помощ за задачка: Тръби в басейн Java
Знам че е обсъждана многократно въпросната задачка но в случая се налага да я решавам на Java и това ме спъва.
Ето условието:
Басейн с обем V има две тръби от които се пълни. Всяка тръба има определен дебит (литрите вода минаващи през една тръба за един час). Работникът пуска тръбите едновременно и излиза за N часа. Напишете програма, която изкарва състоянието на басейна, в момента, когато работникът се върне.
Вход
От конзолата се четат четири реда:
• Първият ред съдържа числото V – Обем на басейна в литри – цяло число в интервала [1…10000].
• Вторият ред съдържа числото P1 – дебит на първата тръба за час – цяло число в интервала [1…5000].
• Третият ред съдържа числото P2 – дебит на втората тръба за час– цяло число в интервала [1…5000].
• Четвъртият ред съдържа числото H – часовете които работникът отсъства – число с плаваща запетая в интервала [1.0…24.00]
Изход
Да се отпечата на конзолата едно от двете възможни състояния:
До колко се е запълнил басейна и коя тръба с колко процента е допринесла. Всички проценти се свеждат до цяло число (без закръгляне).
"The pool is [x]% full. Pipe 1: [y]%. Pipe 2: [z]%."
Aко басейнът се е препълнил – с колко литра е прелял за даденото време, число с плаваща запетая
"For [x] hours the pool overflows with [y] liters."
* Имайте предвид, че поради свеждането до цяло число се губят данни и нормално сборът на процентите да е 99%, а не 100%.
Ето моето решение:
import java.util.Scanner; public class u18 { public static void main(String[] args) { Scanner console = new Scanner(System.in); int volume = Integer.parseInt(console.nextLine()); int pipe1 = Integer.parseInt(console.nextLine()); int pipe2 = Integer.parseInt(console.nextLine()); double hours = Double.parseDouble(console.nextLine()); double water = pipe1 * hours + pipe2 * hours; if (water <= volume) { System.out.println("The pool is " + (int)(water / volume * 100) + "% full." + " Pipe 1: " + (int)(pipe1 * hours / water * 100) + "%." + " Pipe 2: " + (int)(pipe2 * hours / water * 100) + "%."); } else { System.out.println("For " + hours + " hours the pool overflows with " + (int)(water - volume) + " liters."); } } }
На пръв поглед изкарва точния резултат и все пак пустия джъдж дава 60 от 100. И не знам каде е грешката (ето Тук е задачката).
Здравей колега всичко е наред получават ти се точни резултати проблема е във форматирането на изхода пример: При вход 929, 123, 321, 12 На теб ти изкарва: For 12.0 hours the pool overflows with 4399 liters. А джьджа очаква: For 12 hours the pool overflows with 4399 liters.
Идеята е да ти показва целите числа без .0 след тях! Аз този проблем го реших като използвах DecimalFormat суб клас за форматиране:
DecimalFormat beztochka = new DecimalFormat("0.##");
и отдолу принтираш като прилагаш форматирането така:
System.out.println("For " + beztochka.format(hours) + " hours the pool overflows with " + beztochka.format(water - volume) + " liters.");
Този принт е на моето решение при теб просто слагай форматирането пред твоите променливи.
След подобрението все още съм на -27 точки до целта.. :D
http://pastebin.com/RLjPsY4E
Пробвах както при теб, да форматна и overflowa, но тогава дава още по-малко точки. Кофти, че не мога да видя какви тестове минават през програмата, за да видя точно къде бъркам и да ги оправя.. Гърмят ми 6,8,11 и 13 тест...
Можеш да видиш тестовете ТУК
А това е моето 100/100 решение ако ще ти помогне.
Е тестовете изкарва, крайният резултат, мен ми трябва информацията подаваща се на конзолата..
Има и тази информация разгледай по подробно нещата от линка които ти пратих.. Папка Problem02-PoolPipes-Tests има in и out документи отваряй ги с notepad++ и ще видиш...