Loading...
rumenhco2001 avatar rumenhco2001 4 Точки

Задача: реколта

Здравейте,

това е моят код за решението на задачата. В https://judge.softuni.bg/Contests/Practice/Index/507#3 ми дава 90/100 и не мога да разбера от къде е проблема. Като грешка ми излиза: 

Test #10 (Incorrect answer)

Time used: 0.031 s

Memory used: 7.58 MB

 

Според мен проблемът е някъде в закръгляването на числата, но мисля, че съм ги закръглил както е по условие. 

Някой би ли ми помогнал да разбера от къде идва проблема?

Предварително благодаря за помощта! :)

 

 

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

namespace _04.Harvest
{
    class Program
    {
        static void Main(string[] args)
        {
            var X = int.Parse(Console.ReadLine()); // площта на лозето
            var Y = double.Parse(Console.ReadLine()); //от 1 кв.м. се изкарват У кг грозде 
            var Z = int.Parse(Console.ReadLine()); //нужни литри вино 
            var number = int.Parse(Console.ReadLine()); // брой работници

            var total_grape = X * Y; 
            var grape = 0.4 * total_grape; 
            var liter = Math.Ceiling(grape / 2.5);

            if (liter < Z)
            {
                var needed = Z - liter; 
                Console.WriteLine("It will be a tough winter! More {0} liters wine needed.", Math.Floor(needed));
            }
            else
            {


                var more = Math.Ceiling(liter - Z);
                var person = more / number;
                Console.WriteLine("Good harvest this year! Total wine: {0} liters.", Math.Ceiling(liter));
                Console.WriteLine("{0} liters left -> {1} liters per person. ", Math.Ceiling(more), Math.Ceiling(person));
            }

        }
    }
}
 

Тагове:
0
Programming Basics
Axiomatik avatar Axiomatik 2422 Точки
Best Answer

The problem in your solution was that you already applied Math.Floor on: var liter = Math.Ceiling(grape / 2.5), before you entered the if-else validation. This most likely led to some calculation errors by the judge system :

Refactored code (100%):

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

namespace _04.Harvest
{
    class Program
    {
        static void Main(string[] args)
        {
            var X = double.Parse(Console.ReadLine()); // площта на лозето
            var Y = double.Parse(Console.ReadLine()); //от 1 кв.м. се изкарват У кг грозде 
            var targetLiter = double.Parse(Console.ReadLine()); //нужни литри вино 
            var workers = int.Parse(Console.ReadLine()); // брой работници

            //var total_grape = X * 0.4;
            //var grape = Y * total_grape;
            //var actualLiter = grape / 2.5;

            var amountGrapes = ((X * Y) / 2.5);
            var actualLiter = amountGrapes * 0.4;

            if (actualLiter < targetLiter)
            {
                var needed = Math.Floor(targetLiter - actualLiter);
                Console.WriteLine("It will be a tough winter! More {0} liters wine needed.", needed);
            }
            else
            {
                var leftOver = Math.Ceiling(actualLiter - targetLiter);
                var person = Math.Ceiling(leftOver / workers);
                Console.WriteLine("Good harvest this year! Total wine: {0} liters.", Math.Floor(actualLiter));
                Console.WriteLine("{0} liters left -> {1} liters per person. ", leftOver, person);
            }
        }
    }
}

0
rumenhco2001 avatar rumenhco2001 4 Точки

Thank you so much! =)

 

This is my solution:

 

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

namespace _04.Harvest
{
    class Program
    {
        static void Main(string[] args)
        {
            var X = int.Parse(Console.ReadLine()); // площта на лозето
            var Y = double.Parse(Console.ReadLine()); //от 1 кв.м. се изкарват У кг грозде 
            var Z = int.Parse(Console.ReadLine()); //нужни литри вино 
            var number = int.Parse(Console.ReadLine()); // брой работници

            var total_grape = X * Y; 
            var grape = 0.4 * total_grape; 
            var liter = grape / 2.5;

            if (liter < Z)
            {
                var needed = Math.Floor(Z - liter); 
                Console.WriteLine("It will be a tough winter! More {0} liters wine needed.", needed);
            }
            else
            {


                var more = Math.Ceiling(liter - Z);
                var person = Math.Ceiling(more / number);
                Console.WriteLine("Good harvest this year! Total wine: {0} liters.", Math.Floor(liter));
                Console.WriteLine("{0} liters left -> {1} liters per person. ", more, person);
            }

        }
    }
}
 

0
towardthen avatar towardthen 2 Точки

Литрите са същите от печата.

Конзола. Реколтата тази година беше добра. Брой литри вино: 0,", Math.Floor(литър);

breakout game
 

0
knoteva avatar knoteva 1081 Точки

Здравей,

  • “Good harvest this year! Total wine: {общо вино} liters.”
    • Резултатът трябва да е закръглен към по-ниско цяло число.

Ред 20: var liter = grape / 2.5;

Ред 33: Console.WriteLine("Good harvest this year! Total wine: {0} liters.", Math.Floor(liter));

0
rumenhco2001 avatar rumenhco2001 4 Точки

Здравейте!

Промених кода по начина, както Вие предложхте, но отново получавам 90 от 100т. 

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

namespace _04.Harvest
{
    class Program
    {
        static void Main(string[] args)
        {
            var X = int.Parse(Console.ReadLine()); // площта на лозето
            var Y = double.Parse(Console.ReadLine()); //от 1 кв.м. се изкарват У кг грозде 
            var Z = int.Parse(Console.ReadLine()); //нужни литри вино 
            var number = int.Parse(Console.ReadLine()); // брой работници

            var total_grape = X * Y; 
            var grape = 0.4 * total_grape; 
            var liter = grape / 2.5;

            if (liter < Z)
            {
                var needed = Z - liter; 
                Console.WriteLine("It will be a tough winter! More {0} liters wine needed.", Math.Floor(needed));
            }
            else
            {


                var more = Math.Floor(liter - Z);
                var person = more / number;
                Console.WriteLine("Good harvest this year! Total wine: {0} liters.", Math.Ceiling(liter));
                Console.WriteLine("{0} liters left -> {1} liters per person. ", Math.Ceiling(more), Math.Ceiling(person));
            }

        }
    }
}
 

0
knoteva avatar knoteva 1081 Точки

Здравей,

При печатанет на литрите не е променено.

 

Console.WriteLine("Good harvest this year! Total wine: {0} liters.", Math.Floor(liter));

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