Problem 1. SoftUni Airline
Здравейте, стигам до тук със задачата и не мога да продължа.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class Program
{
static void Main()
{
int flights = int.Parse(Console.ReadLine());
int Income = 0;
int Fuel = 0;
int Overall = 0;
int Average = 0;
for (int i = 0; i < flights; i++)
{
int Apass = int.Parse(Console.ReadLine());
int Aprice = int.Parse(Console.ReadLine());
int Ypass = int.Parse(Console.ReadLine());
int Yprice = int.Parse(Console.ReadLine());
int Fprice = int.Parse(Console.ReadLine());
int Fconsume = int.Parse(Console.ReadLine());
int Fduration = int.Parse(Console.ReadLine());
Income = Apass * Aprice + Ypass * Yprice;
Fuel = Fprice * Fconsume * Fduration;
}
if (Income >= Fuel)
{
Console.WriteLine("You are ahead with {0:f3}$.", Income - Fuel);
}
else
{
Console.WriteLine("We've got to sell more tickets! We've lost {0:f3}$.", Income - Fuel);
}
}
}
моля за малко помощ. :)
3 неща откривам в твоя код на пръв поглед като причини да не ти се получава 1-я пример:
1. До колкото разбирам по условие 2-я вход е за цената за възрастни, а 3-я за броя младежи, а на теб 2-я ти е за броя младежи, а 3-я за цената на възрастни. И от там ти се омазва всичко...
Размени тези 2 реда:
int youngPassCount = int.Parse(Console.ReadLine());
double adultTicketPrice = double.Parse(Console.ReadLine());
2. И отделно в кода, който си дал имаш 1 вход по-малко - липсва ти за flight duration. И във формулата за outcome трбява да включиш него, не броя полети.
3. И отговорът, който се търси в първия пример е $5.000, не $5000 . На теб ти се получава цяло число $5, вместо дробно $5.000 - За да го форматираш както трябва $. можеш да го включиш спокойно в първия стринг да стане ей така -
Console.WriteLine("You're ahead with {0:f3}$.", profit); - и става както трябва. Идеята на {0:f3} е точно целия стринг да е събран на едно място.
И замени double с decimal, за да си нямаш проблеми в Judge ако ще го качваш, щом са дали този обхват, значи някое от изчисленията ще попада в него и ще си го търсят...
По условие
Console.WriteLine("Overall profit -> {0:f3}$.", profit);
Console.WriteLine("Average profit -> {0:f3}$.", avgProfit);
трябва да са след всички полети, т.е. по някакъв начин трябва да се сумира за всеки полет печалбата. Трябва да са изнесени извън for - цикъла. С първия пример се получава, защото там броя полети е 1.
P.S edit. Ето го моето решение: https://dotnetfiddle.net/UKtB4G . Само че там има ограничение до 10 въвеждания на входа, и при втория пример не може да се тества, тъй като за 2 полета минават 10. Но мина проверките в judge със 100/100.
Има вход за flight duration. Само че условието е сбъркано и вместо "брой на полетите" е наречено "продължителност на полетите", което ме обърква и затова го преименувах на простото "flights", чиято декларация се намира точно над ФОР цикъла. Откъде знам, че условието е сбъркано? Защото пише следното:
При толкова споменавания на брой полети и само една променлива с име "продължителност на полета", няма какво друго да е, освен да е сбъркано. Освен това пише, че FD е цяло число. Щом е цяло число, значи става въпрос за брой полети. Отделно, че Джъдж не се интересува как си си кръстил променливата (знам, защото съм го тествал вече), интересува го да има вход за нея.
Сега направих нещата както ти казваш (вкл. и прекръстих "flights" на "flightDuration") и новият резултат е с 200 долара повече от това, което трябва да бъде: +205 долара.
Неее, вярно е малко объркващо, но виж на Input какво ти пише -
On the first line you will receive an integer N (1 e в първия пример), the number of flights you need to manage. For each flight you will receive exactly 7 lines of input:
adult passengers count (6)
adult ticket price (20)
youth passengers count (11)
youth ticket price (10)
fuel price per hour (15)
fuel consumption per hour (5)
flight duration (3)
Значи стават общо 8 променливи, за които трябва да въвеждаш вход - N извън цикъла + всичките 7 от списъка по веднъж във всеки цикъл от 0 до N - твоите са общо 7 (както каза - не става въпрос как са кръстени, а колко от тях въвеждаш на входа).
Това N ти е за броя полети, по който ще връткаш for-а. Аз просто съм го прекръстила flights, за да ми е по-ясно после, отделно последното ти е за flight duration (продължителност на полета, т.е. часовете, които трае един полет), с което трябва да изчисляваш формулата. На втората страничка от условието ти е за него.
The flight duration will be integer in range [0…72].
Направи си проверка по първия пример в твоя код, да видиш че последното число, което е 3 никъде не го въвеждаш.
Така ли?
http://pastebin.com/HW4Pyeeb
Каквото и да правя, каквито и променливи да задавам, все не излизат тия прословути 5 долара печалба. С кода от текущия линк това ми е изходът:
Виж ми кода горе в линка, който е моето решение на задачата, в което излизат прословутите 5 долара печалба и си го сравни с твоя. И плюс това примерът не ти е коректен - виж в съответния пример, чийто отговор си дал, колко променливи още не си въвел.
Ей тук още ти започва грешката:
int youngPassCount = int.Parse(Console.ReadLine()); // това трябва да 3
int adultPassCount = int.Parse(Console.ReadLine()); // това трябва да е 1
decimal youngTicketPrice = decimal.Parse(Console.ReadLine()); // това трябва да е 4
decimal adultTicketPrice = decimal.Parse(Console.ReadLine()); // това трябва да е 2
По условие на входа се въвеждат 1. adultPassCount, 2. adultTicketPrice, 3. youngPassCount, 4. youngTicketPrice. Формулата по която са дадени отговорите и както се изчисляват в judge е 1*2 + 3*4 (имам предвид като ред на входа, виж на теб кое на кое отговаря). Твоята формула е 2*4 + 1*3
П.С. За да ти е съвсем коректно решението -
Console.WriteLine("Overall profit -> {0:f3}$", profit);
Console.WriteLine("Average profit -> {0:f3}$", avgProfit);
трябва да са след последната врътка от for, от вън. За целта profit i avgProfit трябва да са глобални променливи, т.е. да ги декларираш преди for-a със ст-ст 0, а вътре в него само да им зададеш формулите, като profit трябва да е с натрупване - към стария profit, да добавяш новия. т.е. profit += income - outcome; avgProfit = profit / flights;