Loading...
a.polyanska avatar a.polyanska 107 Точки

[Exam Problems] C# Basics - Joro The Football Player - Runtime Error

Здравейте,

 

Някой може ли да ми каже защо, когато събмитвам в джъдж-системата ми дава  постоянно на два от тестовете "Runtime Error"? Не мисля, че някъде се препълват стойностите (поне не мога да открия къде може да става подобно нещо). Ето линк към едно от съобщенията на системата: тук

Тагове:
0
Programming Basics
velio84 avatar velio84 241 Точки

Да попитам и аз, явно не мога да се оправя с Judge системата... :)

програмата си върви като я пусна през visual studio express, но в Judge ми дава 0 точки, което явно не е добре :D

ето го кода:

 

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

namespace JoroFootballPlayer
{
    class JoroFootballPlayer
    {
        static void Main(string[] args)
        {
            int p, h, hollydayPlay, normalWeekPlay, naSeloPlay, totalDaysPlay;
            string year;
            year = Console.ReadLine();
            p = Convert.ToInt32(Console.ReadLine());
            h = Convert.ToInt32(Console.ReadLine());


            hollydayPlay = p / 2;
            naSeloPlay = h;
            normalWeekPlay = (((52 - h) * 2) / 3) * 2;


            totalDaysPlay = hollydayPlay + naSeloPlay + normalWeekPlay;


            if (year == "t")
                Console.WriteLine("Joro will play football in {0} days of the year!", totalDaysPlay + 3);
            else
                Console.WriteLine("Joro will play football in {0} days of the year!", totalDaysPlay);

        }
    }
}

0
a.angelov avatar a.angelov 1316 Точки

Грешката ти е, че в output-а печаташ излишни неща. Печатай само искания резултат, както е посочено в условието на задачата:

On the only output line you must print an integer...

без да го украсяваш /както ти си направил в случая Console.WriteLine("Joro will play football in {0} days of the year!", totalDaysPlay + 3); - отпечатай само числото и няма да имаш проблеми.

Това е принципа на judge системата - не печатай нищо, което не се изисква в задачата. Спазвай абсолютно точно изисквания формат.
1
Filkolev avatar Filkolev 4482 Точки

Навсякъде, където имаш операция деление, трябва да сложиш реален тип числа - double. При теб това са hollydayPlay и normalWeekPlay. Освен това при самото деление трябва да посочиш, че извършваш деление на реални числа, за да не се получи целочислено деление. Т.е. нещо такова (копирам само редовете, в които трябва да се промени нещо):

int p, h, naSeloPlay;

double hollydayPlay, normalWeekPlay, totalDaysPlay; (тези са дробни)

string year;

hollydayPlay = p / 2.0; (2.0 посочва, че искаш за резултат реално, а не цяло число)

naSeloPlay = h;

normalWeekPlay = (((52 - h) * 2) / 3.0); (аналогично ползваме 3.0)

totalDaysPlay = hollydayPlay + naSeloPlay + normalWeekPlay;


Накрая, понеже се иска резултатът да е цяло число, totalDaysPlay може да го обърнеш към int или да му вземеш Math.Floor, т.е. вземаш цялата му част.

Грешка се получава защото ако събереш 3/2 + 3/2 например, ако е целочислено делението резултатът ще е 2 (1+ 1), а трябва да е 3 (1.5 + 1.5). Но това не би трябвало да важи за всички тестове в системата.

Получаваш 0 точки, защото си спазил условието, но не и примерите. Тази задача е с грешно зададен алгоритъм в Judge, т.е. недоглеждане на автора.

Когато смяташ normalWeekPlay, ти умножаваш накрая по 2 (което е по условие и е вярно), но в примерите е показано, че не се умножава по 2, т.е. реално Жоро не играе и двата дни в тези уикенди. Има разминаване между текстовото условие и примерите, за да ти работи задачата в Judge трябва да следваш примерите и да махнеш двойката. Вероятно само с тази промяна би трябвало да получиш някакви точки с твоя код, но няма да са 100 предполагам. Като оправиш и променливите, които трябва да са double, тогава вече ще може да вземеш 100-те точки.

И да, това, което е посочил колегата - Judge не толерира излишни неща в output-a, трябва да му подадеш само това, което се иска - в случая едно число и нищо повече.

1
velio84 avatar velio84 241 Точки

Благодаря ви много за отговорите smile

Утре ще го оправя и ще го тествам, че вече е късно и не ми се занимава.

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