Loading...
eli.tt avatar eli.tt 1 Точки

Домашно от "Simple Operations & Calculations" - задача 06. "Charity Campaign"

Здравейте,

Относно гореспомената задача, когато подавам за проверка решението си в Judge-системата, от всички 10 теста, на които то се подлага, резултатът е 7 верни и 3 грешни отговора. Колкото и да се взирах в изходния код, така и не успях да си обясня кои са стойностите, за които се получава грешка и съответно да пробвам да оправя проблема. Може ли някой да ми помогне? Ето го и кодът:

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

namespace Charity_Campaign
{
    class Program
    {
        static void Main(string[] args)
        {
            int days = int.Parse(Console.ReadLine());
            int cooks = int.Parse(Console.ReadLine());
            int cakes = int.Parse(Console.ReadLine());
            int wafers = int.Parse(Console.ReadLine());
            int pancakes = int.Parse(Console.ReadLine());

            if (days >= 0 && days <= 365 && cooks >= 0 && cooks <= 1000 && cakes >= 0 && cakes <= 2000
              && wafers >= 0 && wafers <= 2000 && pancakes >= 0 && pancakes <= 2000)
            {
                var prCakes = days * cooks * cakes * 45;
                var prWafers = days * cooks * wafers * 5.80;
                var prPancakes = days * cooks * pancakes * 3.20;
                var profit = 7.0 / 8 * (prCakes + prWafers + prPancakes);
                Console.WriteLine("{0:F2}", profit);
            }
            else
            {
                Console.WriteLine("Invalid entry!");
            }
        }
    }
}

(резултатите на https://judge.softuni.bg/Contests/Submissions/View/8835718)

Предварително благодаря на всички отзовали се.

 

0
Module: C# Advanced
The_assassin avatar The_assassin 158 Точки

Аз не съм от C# курса, но ще си позволя да отговоря, тъй като според мене, грешката е чисто математическа (не, че съм и математик де... ;-D). Трябва да направиш следното:

prCakes = Броят на тортите X цената за торта »» сумата за тортите за 1 ден от 1 сладкар
prWafers = Броят на гофретите X цената за гофрета »» сумата за гофретите за 1 ден от 1 сладкар
prPancakes = Броят на палачинките X цената за палачинка »» сумата за палачинките за 1 ден от 1 сладкар

И продължаваш:
(prCakes+prWafers+prPancakes) * Броя на сладкарите »» Обща сума за един ден
Горното ^^^^^^ (Обща сума за един ден) X Броя на дните.

Горните операции, дали ще ги пишеш на един ред, или по отделно е въпрос на твой избор. След това от получената стойност намираш 1/8 и я изваждаш от самата нея, за да намериш крайнния резултат.

0
eli.tt avatar eli.tt 1 Точки

Ама всичко това е взето под внимание и направено! (Поради това и съвсем логично 7 от тестовете дават верни отговори - най-малко ако имаше грешка в математическата логика, би следвало и при тях получените резултати да не съвпаднат с очакваните). Все пак нека потвърдя казаното:

    prCakes = days * cooks * cakes * 45                       // това е сумата (в лв) от тортите за всички дни от всички участвали сладкари (брой дни (days) Х брой сладкари (cooks)  Х брой торти на сладкар (cakes) Х цена на 1 торта (45))
    prWafers = days * cooks * wafers * 5.80                  // това пък е сумата от гофретите за всички дни от всички сладкари,
    prPancakes = days * cooks * pancakes * 3.20;       
// това съответно е сумата от палачинките за всички дни от всички сладкари,
   
И за печалбата след приспадане на разходите по организацията имаме (1-1/8 = 7/8) от общата спечелена сума, т.е. profit = 7.0 / 8 * (prCakes + prWafers + prPancakes);

Не, мисля, че другаде е проблемът...

0
The_assassin avatar The_assassin 158 Точки

Ама всичко това е взето под внимание и направено!

Така е, само че в кода на Deftimova, но не и в твоя. smiley

0
eli.tt avatar eli.tt 1 Точки

Напротив, имам предвид, че в моя код това е отразено:

Ето (това е от него):

prCakes = days * cooks * cakes * 45 ->  това е сумата (в лв) от тортите за всички дни от всички участвали сладкари (брой дни (days) Х брой сладкари (cooks)  Х брой торти на сладкар (cakes) Х цена на 1 торта (45)). Както се вижда, взети са под внимание и броя дни, и броя сладкари, само че в променливата (prCakes) при мен е сумата от цената на всички торти за всички сладкари за целия период. Аналогично за гофретите и палачинките. Дали ще изведем пред скоби брой дни Х брой сладкари спрямо сумата от продажбите на 3-те изделия или ще смятаме за всяко изделие печалбата му за всички дни, а после ги събирме за трите, не е от значение.

prWafers = days * cooks * wafers * 5.80                  // това пък е сумата от гофретите за всички дни от всички сладкари,
prPancakes = days * cooks * pancakes * 3.20;       
// това съответно е сумата от палачинките за всички дни от всички сладкари,

И за печалбата след приспадане на разходите по организацията имаме (1-1/8 = 7/8) от общата спечелена сума, т.е. profit = 7.0 / 8 * (prCakes + prWafers + prPancakes).

0
Deftimova avatar Deftimova 14 Точки

Здравей!

Ето моето решение, то е 100/100 точки. Дано ти помогне:

using System;

namespace Upr._06._Charity_Campaign
{
    class Program
    {
        static void Main(string[] args)
        {
            int daysOfcampaign = int.Parse(Console.ReadLine());
            int numberOfCooks = int.Parse(Console.ReadLine());
            int numberOfCakes = int.Parse(Console.ReadLine());
            int numberOfWaffles = int.Parse(Console.ReadLine());
            int numberOfPancakes = int.Parse(Console.ReadLine());

            double incomesFromCakes = numberOfCakes * 45;
            double incomesFromWaffles = numberOfWaffles * 5.80;
            double incomesFromPancakes = numberOfPancakes * 3.20;

            double incomesForADay = (incomesFromCakes + incomesFromPancakes + incomesFromWaffles) * numberOfCooks;
            double totalIncomes = incomesForADay * daysOfcampaign;
            double earnings = totalIncomes - (0.125*totalIncomes);

            Console.WriteLine($"{earnings:f2}");


       
        }
    }
}
 

 

0
20/10/2018 14:14:40
eli.tt avatar eli.tt 1 Точки

Благодаря, Deftimova, очевидно подходът е същият. Наистина, не мога да си обясня откъде идват грешните отговори. Обаче при твоя код се получава...

0
eli.tt avatar eli.tt 1 Точки

Поне да знаех за кои стойности дава грешка...

0
clipro avatar clipro 73 Точки

Знам, че няма да ти хареса, но...

  • Опитай да махнеш валидацията на входа - тя не се изисква, а се приема за даденост
  • Декларирай променливите според типа (вместо var prCake - double prCake)

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

Пиши, когато опиташ за резултата!

 

0
The_assassin avatar The_assassin 158 Точки

Ееее ми да, щом го няма в условието, няма как да мине в „Джъдж“ enlightened

0
iGeorg1ev avatar iGeorg1ev 223 Точки

Здравей,

 

Просто този ред:

var prCakes = days * cooks * cakes * 45; 

го направи да изглежда така:

var prCakes = days * cooks * cakes * 45.00; 

Правиш цената double и всичко е чук :) 

Иво

0
eli.tt avatar eli.tt 1 Точки

Здравейте отново!

Съветът за валидацията на входа определено ми допадна - има основание, махнах го. Освен това по предложението на iGeorg1ev замених 45 с 45.00, и стана! Проверката в Judge мина без съобщения за грешки, заветното 100/100! Ура.

Мерси на всички за отделеното време и помощта!

0
sisis003 avatar sisis003 64 Точки

Много ти благодаря! Имах същия проблем и след корекцията ми дава 100/100 :)

0
eli.tt avatar eli.tt 1 Точки

Туй се иска! -:)

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