Loading...

Задача - "Transport Price" (Изпитни задачи от минали издания на курса)

Някъде бъркам и не мога да разбера къде бъркам с тази задача.

Цена за транспорт
Втора задача от междинния изпит на 6 март 2016. Тествайте решението си тук.
Студент трябва да пропътува n километра. Той има избор измежду три вида транспорт:
Такси. Начална такса: 0.70 лв. Дневна тарифа: 0.79 лв. / км. Нощна тарифа: 0.90 лв. / км.
Автобус. Дневна / нощна тарифа: 0.09 лв. / км. Може да се използва за разстояния минимум 20 км.
Влак. Дневна / нощна тарифа: 0.06 лв. / км. Може да се използва за разстояния минимум 100 км.
Напишете програма, която въвежда броя километри n и период от деня (ден или нощ) и изчислява цената на най-евтиния транспорт.
 

Вход
От конзолата се четат два реда:
Първият ред съдържа числото n – брой километри – цяло число в интервала [1…5000].
Вторият ред съдържа дума “day” или “night” – пътуване през деня или през нощта.

Изход
Да се отпечата на конзолата най-ниската цена за посочения брой километри.

 

My SOURCE

static void Main(string[] args)
        {
            var inputN = Int.Parse(Console.ReadLine());
            var dayNight = (Console.ReadLine());
            var taxi = 0.70;
            var bus = 20;
            var train = 100;

            if (inputN <= 20 && dayNight == "day")
            {
                Console.WriteLine(taxi + inputN * 0.79);
            }
            else if (inputN <= 20 && dayNight == "night")
            {
                Console.WriteLine(taxi + inputN * 0.90);
            }
            else if (inputN >= bus || dayNight == "night" || dayNight == "day")
            {
                Console.WriteLine(inputN * 0.09);
            }
            else if (inputN >= train || dayNight == "night" || dayNight == "day")
            {
                Console.WriteLine(inputN * 0.06);
            }
        }

 

 

 

0
Programming Basics 26/07/2016 13:59:00
stela.iv avatar stela.iv 115 Точки
Best Answer

Пробвай първо да направиш проверката за train, защото като правиш първо проверката за автобуса, а инпута ти е по-голям или равен на 100, проверката за автобуса също е валидна (180 >20). Т.е. никога няма да влезе в проверката за влака.

             else if (inputN >= train || dayNight == "night" || dayNight == "day")
            {
                Console.WriteLine(inputN * 0.06);
            }
            else if (inputN >= bus || dayNight == "night" || dayNight == "day")
            {
                Console.WriteLine(inputN*0.09);
            }

EDIT: тествах го и това не му стига, като редакция. Трябва да махнеш равенството при проверката за такси, защото ако е точно 20, по-евтино е с автобус. И освен това проверките трябва да са структурирани така :

 inputN >= train && (dayNight == "night" || dayNight == "day")

защото когато са inputN >= bus || dayNight == "night" || dayNight == "day", това означава, че ще влезе в тази проверка при само една валидна проверка от трите .

Успех :)

1
27/07/2016 09:36:59
dilqna9 avatar dilqna9 44 Точки

Така ти излиза решението:


  public static void Main()
  {
    var inputN = int.Parse(Console.ReadLine());
            var dayNight = (Console.ReadLine());
            var taxi = 0.70;
            var bus = 20;
            var train = 100;
            if (inputN < 20 && dayNight == "day")
            {
                Console.WriteLine(taxi + inputN * 0.79);
            }
            else if (inputN < 20 && dayNight == "night")
            {
                Console.WriteLine(taxi + inputN * 0.90);
            }
            else if (inputN >= bus && inputN < train && (dayNight == "night" || dayNight == "day"))
            {
                Console.WriteLine(inputN * 0.09);
            }
            else if (inputN >= train && (dayNight == "night" || dayNight == "day"))
            {
                Console.WriteLine(inputN * 0.06);
            }     
  }

 

-1
Lichev avatar Lichev 3 Точки

Пример за друго решение с малко по - малко логически проверки . :)  http://pastebin.com/1XaFNSMc

1
26/07/2016 17:14:07

Твоя код ми изглежда доста по опростен и ми харесва повече от моя. :D

0
Impheatuss avatar Impheatuss 23 Точки

Ето и моето решение с тернарен оператор, което може да ти е от полза занапред.

http://pastebin.com/1iwXDKg4

0
10/08/2016 16:40:29
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей

 

1) Проверката за такси трябва да е дали е по - малко от 20, а не по - малко или равно. В момента ако имаш 20 километра разстояние, ще тръгнеш с такси, а не с влак.

2) else if (inputN >= bus || dayNight == "night" || dayNight == "day") - това е напълно грешно. В момента ако не влезеш в таксито, влизаш веднага във влак, независимо дали километрите са повече от 100. В тази част не ти трябва проверка дали е ден или нощ, тарифата е една. Също така проверката трябва да е 20 <= n < 100, за да сисигурен, че ако се въведе инпут с повече от 100 километра ще тръгнеш с кола а не с влак.

3) Забележката за проверката за dayNight важи и за тук. Вариант е последната секция да я оставиш за else, но е по - добре да си разпишеш условието за влизане в нея (n >= 100)

 

Забележка: Променливите не са именувани по най - добрия начин. Променливите за цена на километър също могат да се изкарат.

 

Поздрави!

0
gogokotsev00 avatar gogokotsev00 32 Точки

Трябва таксито да е по-малко от 20;

Не ти трябват тарифи за автобуса и влака;

Също така за автобуса трябва да ти е >=20 && < 100

 

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