Задача 02 - Тръби в басейн
Задача 02 - Тръби в басейн
от
Coding 101 Exam - 26 March 2016
Лекция: 3. Simple-Conditions-Exercises
Вече 3 часа седя и я въртя тая задача, някой идея?
http://pastebin.com/a8H4mRc3
Лекция: 3. Simple-Conditions-Exercises
Вече 3 часа седя и я въртя тая задача, някой идея?
http://pastebin.com/a8H4mRc3
Здравей. Имаш объркана проверка, в единият от случаите. Трябва да присъства че обема на басейна е равен на запълненената част.
Ако искаш погледни моето решение от тук.
Така днес разбрах къде ми е грешката, не закръглям Напълнения обем към цяло число, тръба 1 и тръба 2 в процентити ги закръглям, само че напълнения обем го оставям незакръглен.
Иначе проверките са ми същите само където почвам първо с втората проверка, което не е проблем.
Исках да те питам:
Console.WriteLine("The pool is {0}% full. Pipe 1: {1}%. Pipe 2: {2}%.", (int)(percentageFilledPool), (int)(perecentageFilledFirstPipe), (int)(percentageFilledSecondPipe));
С тези инт-ове което си записала така в скобите гарантира ли ни че ще обърне променливите от double в integer(цяло число) така записано.
Понеже аз съм ползвал Math.Floor, незнаех че и така може.
Това (int) пред скобите се нарича кастване, по този начин преобразуваш от един тип в друг. Като се гарантира, че всичко след десетичната запетая ще изчезне, тоест остава само целочислената част. В условието на задачата не се изисква закръгляне. Друг вариант, който може да се използва е Math.Truncate, като по особеното е че винаги връща стойността, която е по-близо до нулата. Или казано по друг начин Math.Truncate изпълнява функцията Math.Floor при положителни числа, и Math.Ceiling при отрицателни числа.
Ето моето решение (100/100):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PoolPipes
{
class PoolPipes
{
static void Main(string[] args)
{
var V = double.Parse(Console.ReadLine());
var p1 = double.Parse(Console.ReadLine());
var p2 = double.Parse(Console.ReadLine());
var HH = double.Parse(Console.ReadLine());
var resultP1 = p1 * HH;
var resultP2 = p2 * HH;
var allPipe = resultP1 + resultP2;
var FullPool = (int)((allPipe / V) * 100);
var percentP1 = (int)((resultP1 / allPipe) * 100);
var percentP2 = (int)((resultP2 / allPipe) * 100);
var overflows = (allPipe) - V;
if (allPipe <= V)
{
Console.WriteLine("The pool is {0}% full. Pipe 1: {1}%. Pipe 2: {2}%.",
FullPool, percentP1, percentP2);
}
else
{
Console.WriteLine("For {0} hours the pool overflows with {1} liters.", HH, overflows );
}
}
}
}
Здравей,
от коментарите ти виждам, че внимателно си изчел условието, което от опит зная, че е много важно.
В задачата се изисква ако басейна не се е напълнил колко процента от него са запълнени - тоест общо обема на 2-те тръби разделен на обема на басейна и това по 100, за да ти даде %. След което се изисква процента "принос" на всяка една от 2-те тръби - тоест ще търсиш частта на първата тръба разделена на общо литрите от 2-те тръби по 100 и частта на 2-рата разделена общо на литрите от 2-те * 100, (а не делено на обема на басейна!). За закръгляне ползваш Math.Truncate. Най-важното не само тук, но и във всяка друга задача е да се чете внимателно условието. Помня като я решавах бях загрял на вълна състезателно кодене и се хванах на тая въдица с част от цяло в %, :)
ето ми и кода - работи на 100