Loading...

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

Iv_Konov avatar Iv_Konov 383 Точки

Съдията допуска и грешни програми със 100/100 - 04. Equal Pairs - For-Loop - Exercise

Здравейте,

 

Натъкнах се на любопитен факт, но без особена стойност... Доста колеги се оплакват, че  работещи програми не минават коректно през Съдията - е, тук е различно. :)

Съдията оценява и грешни програми със 100/100 (разбира се, не всяка грешна програма минава със 100/100). И двата варианта по-долу минават 100/100.

 

Условие:

Дадени са 2*n-на брой числа. Първото и второто формират двойка, третото и четвъртото също и т.н. Всяка двойка има стойност – сумата от съставящите я числа. Напишете програма, която проверява дали всички двойки имат еднаква стойност или печата максималната разлика между две последователни двойки. Ако всички двойки имат еднаква стойност, отпечатайте "Yes, value = {Value}" + стойността. В противен случай отпечатайте "No, maxdiff = {Difference}" + максималната разлика. 

 

Примерен вход:

3
1
2
1
3
4
0

На този вход коректната програма следва да дава резултат: No, maxdiff=1
Некоректна програма дава: Yes, value=4
(коректната програма е "объркана" след като нарочно добавих маркирания текст)

 

Съдията:
https://judge.softuni.bg/Contests/Compete/Index/1164#3

 

Задача:
https://softuni.bg/downloads/svn/programming-basics-v4/course-content/course-resources/CSharp/06.PB-CSharp-For-Loop/06.4%20PB-CSharp-For-Loop-Exercise.docx


 

Примерно решение:

 

using System;

namespace _04._Equal_Pairs
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = int.Parse(Console.ReadLine());

            int maxDif = int.MinValue;
            int sum = 0;
            int sumOld = 0;
            int dif = 0;
            bool isOnlySameDif = true; // променлива, която я ползвам за проверка дали е имало различни суми

            for (int i = 1; i <= num; i++)
            {
                sum += int.Parse(Console.ReadLine());
                sum += int.Parse(Console.ReadLine());
                
                if (i > 1)
                {
                    dif = Math.Abs(sumOld - sum);

                    if (dif != 0 && dif > maxDif)
                    {
                        maxDif = dif;
                        isOnlySameDif = false;
                    }
                    //else     // това е допълнения текст, за да повредя програмата
                    //{
                    //    isOnlySameDif = true;
                    //}

                }

                sumOld = sum;
                sum = 0;
            }

            if (isOnlySameDif)
            {
                Console.WriteLine($"Yes, value={sumOld}");
            }
            else
            {
                Console.WriteLine($"No, maxdiff={maxDif}");
            }
        }
    }
}
 

 

Поздрави,

Иван

Тагове:
0
Programming Basics with C# 16/03/2019 17:03:15
Petya_koleva avatar Petya_koleva 104 Точки

Не мога да го тествам в момента, но явно и judge, не е предвидил всички грешки. Все пак от човек е правена, а всеки греши. 

0
Iv_Konov avatar Iv_Konov 383 Точки

Добро утро, Петя,

 

Да, разбира се, просто е любопитно и нищо повече..., а и аз го установих, докато грешах. laugh Нищо чудно и задачата да е опростена нарочно, т.е. да са премахнати някои проверки.

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

 

Поздрави,

Иван :)

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