Съдията допуска и грешни програми със 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}");
}
}
}
}
Поздрави,
Иван
Добро утро, Петя,
Да, разбира се, просто е любопитно и нищо повече..., а и аз го установих, докато грешах. Нищо чудно и задачата да е опростена нарочно, т.е. да са премахнати някои проверки.
Според мен, докато се уча, е загубена кауза да търся целенасочено грешки в Съдията.
Поздрави,
Иван :)