Професионална програма
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 224 Точки

Здравей,

 

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

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