Проблем при проверка на решението на задача N.20Тръби в басейн( Simple.Conditions) в judge system.
Пробвах кода на задача - 20 "Прости проверки" в visual studio 2015 и там си работи, но когато го пробвам в judge system, появява ми се грешка и кода не се изпълнява.
задача 20 " Тръби в басейн. Басейн с обем 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%. "
Ето го кода, поне това което опитах да напиша :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Pipesinpool
{
class Pipesinpool
{
static void Main(string[] args)
{
var V = int.Parse(Console.ReadLine());
var P1 = int.Parse(Console.ReadLine());
var P2 = int.Parse(Console.ReadLine());
var H = double.Parse(Console.ReadLine());
var resultV = (P1+P2)*H;
if (1 < V && V < 10000 && P1 > 1 && P1 < 5000 && P2 > 1 && P2 < 5000 && H > 1.0 && H < 24.00 && V > resultV)
{
Console.WriteLine("The pool is "+((resultV/V)*100)+ "% full. Pipe 1:"+((P1*H/resultV)*100)+"%.Pipe 2:" + ((P2*H/resultV)*100)+"%");
}
else if (1 < V && V < 10000 && P1 > 1 && P1 < 5000 && P2 > 1 && P2 < 5000 && H > 1.00 && H < 24.00 && V < resultV)
{
Console.WriteLine("For " + (resultV-V)/(P1 + P2) + "hours the pool overflows with" +(resultV-V)+ " liters.");
}
}
}
}
Здравей, Трябва да използваш Math.Floor(той закръгля към по малкото винаги), а Math.Round - до най-близкото. В иф проверката, трябва да >=. И малко грешки в ичисленията имаш. Ето ти поправен кода -> http://pastebin.com/8fqQhd3D
Когато решавах тази задача, първоначално използвах Math.Floor, но гърмеше още на домашния тест (тоест, преди да я пусна в Джъдж) и затова изполвах Math.Truncate, което директно "изрязва" всичко след десетичната точка и така си реших проблема.
Така и не разбрах защо Math.Floor не искаше да си свърши работата, но след като Трънкейт ми реши проблема, не съм се занимавал да разнищвам случая.
Едва когато дописах Math.Floor и за резултата на - var percentOffullnes = Math.Floor((allTheLittres / v) * 100);//66% , най-накрая ми даде 100/100.
Math.Round закръгля до по близкото 3.4 -> 3; 3.6 -> 4
Math.Floor закръгля винаги към по малкото -> 3.4 -> 3; 3.6 -> 3