Loading...
edgelord avatar edgelord 0 Точки

Тръби в басейн . Междинен тест 26 Март (Judge ми дава 20/100 и нямам идея защо, проверих официалното решение, но пак не намирам разлика.)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace pipes_in_pool
{
    class Program
    {
        static void Main(string[] args)
        {
            var vPool = int.Parse(Console.ReadLine());
            var p1 = int.Parse(Console.ReadLine());
            var p2 = int.Parse(Console.ReadLine());
            var time = double.Parse(Console.ReadLine());
            var vPipes = (p1 * time) + (p2 * time);
            var pipeOnePercent = (p1 * time) / vPipes * 100;
            var pipeTwoPercent = (p2 * time) / vPipes * 100;
            var vFullPool = vPipes / vPool * 100;
            var overflow = vFullPool - vPool;
            var pipeTwoPercentExact = pipeTwoPercent - (pipeTwoPercent / 100);
            if (vPipes <= vPool)
            {
                Console.WriteLine($"The pool is {Math.Round(vFullPool)}% full. Pipe 1: {Math.Round(pipeOnePercent)}%. Pipe 2: {Math.Round(pipeTwoPercentExact)}%.");
            }
            else if (vPipes > vPool)
            {
                Console.WriteLine($"For {time} hours the pool overflows with {overflow} liters.");
            }
        }
    }
}
 

///////////////////////////////////////////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Условие - http://prntscr.com/as5e9e

Официалното решение - http://pastebin.com/zDNJV8Kp

Тагове:
0
Programming Basics 26/03/2017 16:08:16
spzvtbg avatar spzvtbg 581 Точки
Best Answer

http://pastebin.com/fmtWSD68 - това ти е поправеното решение отбелязъл съм в него къде, как, какво имаше като грешки

надявам се да се разбира

успех! 

0
daniellsbg avatar daniellsbg 20 Точки

Нулевите тестове минават в джъджа а останалите са грешни, но джъджа не ти позволява да провериш къде ти е грешката която най-вероятно е при изчисленията. В такъв случай използвай дебъгера задавайки различни стойности за да провериш къде бъркаш. Дебъгера може да е изключително полезен!!!!! Веднъж научиш ли се да го използваш, ще ти е незаменим помощник в доста от задачите.

А иначе ето кода в който съм поправил Math.Round -> Math.Truncate  и изчислението при overflow

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace pipes_in_pool
{
    class Program
    {
        static void Main(string[] args)
        {
            var vPool = int.Parse(Console.ReadLine());
            var p1 = int.Parse(Console.ReadLine());
            var p2 = int.Parse(Console.ReadLine());
            var time = double.Parse(Console.ReadLine());
            var vPipes = (p1 * time) + (p2 * time);
            var pipeOnePercent = (p1 * time) / vPipes * 100;
            var pipeTwoPercent = (p2 * time) / vPipes * 100;
            var vFullPool = vPipes / vPool * 100;
            var overflow = vPipes - vPool;
            var pipeTwoPercentExact = pipeTwoPercent - (pipeTwoPercent / 100);
            if (vPipes <= vPool)
            {
                Console.WriteLine($"The pool is {Math.Truncate(vFullPool)}% full. Pipe 1: {Math.Truncate(pipeOnePercent)}%. Pipe 2: {Math.Truncate(pipeTwoPercent)}%.");
            }
            else if (vPipes > vPool)
            {
                Console.WriteLine($"For {time} hours the pool overflows with {overflow} liters.");
            }
        }
    }
}

0
26/03/2017 16:39:17
edgelord avatar edgelord 0 Точки

Благодаря на всички, разбрах си грешките! :^)

0
lu.savova avatar lu.savova 2 Точки

Грешката ти идва от  Math.Round(), което закръгля до най - близкото цяло число. Вместо него използвай Math.Truncate(),то взима само цялата част на дадено дробно число.

0
MilenaAdzhemova avatar MilenaAdzhemova 50 Точки

http://pastebin.com/GgYYL7E1

Дава 100т. Мисля че ще ти помогне да видиш къде изпускаш нещо.

0
MilenaAdzhemova avatar MilenaAdzhemova 50 Точки

На мен също /ако не се лъжа/ не ми се получи с Math.Round.

0
desislava777 avatar desislava777 165 Точки

Основната ти грешка е, че е трябвало да използваш Math.Truncate() вместо Math.Round(), защото процентите трябва да се сведат до цяло число без да се прави закръгляне. Вместимостта на басейна би трябвало да е от тип double, а не int. Намалих броя на променливите, за да има по-малка вероятност от допускане на грешки. Това е твоят код, вече променен, за достигане на 100 точки:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var vPool = double.Parse(Console.ReadLine());
            var p1 = int.Parse(Console.ReadLine());
            var p2 = int.Parse(Console.ReadLine());
            var time = double.Parse(Console.ReadLine());
            double vPipes = (p1 * time) + (p2 * time);
            double pipeOnePercent = (p1 * time) / vPipes * 100;
            double pipeTwoPercent = (p2 * time) / vPipes * 100;
            if (vPipes <= vPool)
            {
                Console.WriteLine("The pool is {0}% full. Pipe 1: {1}%. Pipe 2: {2}%.",
              Math.Truncate(100*vPipes/vPool), Math.Truncate(pipeOnePercent), Math.Truncate(pipeTwoPercent));
            }
            else if (vPipes > vPool)
            {
                Console.WriteLine("For {0} hours the pool overflows with {1} liters.",time,Math.Abs(vPipes-vPool));
            }
        }
    }
}

0
Viacheslav avatar Viacheslav 5 Точки

https://pastebin.com/yScw4aig това е моето решение, дава ми 76/100 точки. Не разбирам защо? 

Много Ви благодаря за помощ! 

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

с тоя math.truncate навсякъде тои ти сваля стойноста винаги надолу и затов ти бяга примерно имаш  1.5 ще е 1 и тн

оправи си само последния резултат да т ие math,truncate и ще се оправиш...

и бтв защо всички пишете на c# и ползвате var? wtf

1
KamYouriswag avatar KamYouriswag 0 Точки

Защото всички идват от Pascal и мислят, че с var се декларира променлива!
На лекциите така е показано, но не казват, че това е вариантен тип, който може да приема стойности на другите типове, но заема много памет.

0
Viacheslav avatar Viacheslav 5 Точки

https://pastebin.com/YD68q17c това е нов код, и все пак дава 76/100 точки.

Не разбирам зашо? 

Опитах и с Math.Truncate() и c Math.Floor() все пак дава 76 точки.

Може би грешка в Judge?

Много ви благодаря за помощ, 

 

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