Loading...
petaryankov00 avatar petaryankov00 3 Точки

09.Padawan Equipment

Имам проблем с една от задачите във Fundamentals Module with C#.

https://pastebin.com/VRr7KDuP

Judge ми дава 30/100. Мисля, че проблемът е в условието че всеки 6 колан трябва да е безплатен. Някой ако може да помогне ще съм благодарен. Ето и условието:

Yoda is starting his newly created Jedi academy. So, he asked master Ivan Cho to buy the needed equipment. The number of items depends on how many students will sign up. The equipment for the Padawan contains lightsabers, belts and robes.
You will be given the amount of money Ivan Cho has, the number of students and the prices of each item. You have to help Ivan Cho calculate if the money he has is enough to buy all of the equipment, or how much more money he needs.
Because the lightsabres sometimes brakes, Ivan Cho should buy 10% more (taken from the students count), rounded up to the next integer. Also, every sixth belt is free.
Input / Constraints
The input data should be read from the console. It will consist of exactly 5 lines:
  • The amount of money Ivan Cho has – floating-point number in range [0.00…1,000.00]
  • The count of students – integer in range [0…100]
  • The price of lightsabers for a single sabre – floating-point number in range [0.00…100.00]
  • The price of robes for a single robe – floating-point number in range [0.00…100.00]
  • The price of belts for a single belt – floating-point number in range [0.00…100.00]
  • The input data will always be valid. There is no need to check it explicitly.
    Output
    The output should be printed on the console.
  • If the calculated price of the equipment is less or equal to the money Ivan Cho has:
    • "The money is enough - it would cost {the cost of the equipment}lv."
  • If the calculated price of the equipment is more than the money Ivan Cho has:
    •  "Ivan Cho will need {neededMoney}lv more."
  • All prices must be rounded to two digits after the decimal point.
Тагове:
0
Fundamentals Module
Axiomatik avatar Axiomatik 2422 Точки

The main-problem with Padawan is to find out what Math-method to use, in this case only apply Math.Ceiling to calculate the final amount of light-sabers. Math-round will lead to some errors in the tests.

New code:

using System;

namespace PadawanEquipment
{
    class Program
    {
        static void Main(string[] args)
        {
            double amountOfMoney = double.Parse(Console.ReadLine());
            double countOfStudents = int.Parse(Console.ReadLine());
            double priceOfLight = double.Parse(Console.ReadLine());
            double priceOfRobes = double.Parse(Console.ReadLine());
            double priceOfBelts = double.Parse(Console.ReadLine());

            double freeAmountBelts = 0;
            double amountLightSabers = Math.Ceiling(countOfStudents * 1.1);

            if (countOfStudents > 5)
            {
                freeAmountBelts = countOfStudents / 6;
            }

            double totalSumLights = priceOfLight * amountLightSabers;
            double totalSumRobes = priceOfRobes * countOfStudents;
            double totalSumBelts = priceOfBelts * (countOfStudents - freeAmountBelts);
            double totalPrice = totalSumBelts + totalSumLights + totalSumRobes;
            double difference = Math.Abs(amountOfMoney - totalPrice);

            if (totalPrice <= amountOfMoney)
            {
                Console.WriteLine($"The money is enough - it would cost {totalPrice:f2}lv.");
            }
            else
            {
                Console.WriteLine($"Ivan Cho will need {totalPrice - amountOfMoney:f2}lv more.");
            }

        }
    }
}

0
ZlatimirIvanov avatar ZlatimirIvanov 3 Точки

Вместо Math.Round(countOfStudents / 6) пробвай да закръглиш нагоре - Math.Ceil

0
St.tsoneva avatar St.tsoneva 13 Точки

Здрасти колега,

и аз вчера решавах тази задача :)

Аз уча Java, но предполагам, че при те е подобно. Специално students/6 не го закръглих, а го направих така:

int numberOfFreeBelts = students / 6;

т.е. като ползвам интиджър и разделя студентите на 6 ще получа едно цяло число без остатък, което ще представя колко пълни 6ци имам в students. Например, ако имам 10 студента и разделя на 6, отговорът ще бъде 1, т.е. аз ще трябва да закупя един допълнителен колан. От друга страна по твоята логика, мисля, че ако ползваш дабъл число и го закръгляш, трябва да е надолу :)

И ето този раунд ъп, без +1

double totalSumLights = priceOfLight * Math.Ceiling(countOfStudents * 1.1);

дава 100/100

1
19/09/2020 21:19:20
krum_43 avatar krum_43 756 Точки

Почти навсякъде в модула "Основи на програмирането" се използват изрази за загръгляня на число "надолу" или "нагоре"  ?!?

Когато имаме едно число го нанасяме по абцисната ос,така че правилната терминология при закръгляне би трябвало да е "наляво" или "надясно"!!!!!

В основата на програмирането стои математиката (колкото и спорове да има по-въпроса).

;);):)

0
28/09/2020 11:05:34
krum_43 avatar krum_43 756 Точки

Ето едно решение и от мен:

https://pastebin.com/qinXJsn7

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