Проблемы с определением длины промежутка
Делаю программу для решения 15 задания ЕГЭ. Я написал код, который должен определить длину промежутка, но возвращаемое им значение меньше ответа.
Мой код:
using System;
using System.Collections.Generic;
using System.Linq;
namespace EGE_15
{
class Program
{
static void Main(string[] args)
{
int x, a1, a2; // a1 - начало промежутка, a2 - конец
List<int> answers = new List<int>(); // Все подходящие промежутки
for (a1 = 0; a1 < 100; a1++)
{
for (a2 = 0; a2 < 100; a2++)
{
bool z = true; // Переменная для проверки промежутка при любом "х"
for (x = 0; x < 100; x++)
{
if (f(x, a1, a2) == false)
{
z = false;
break;
}
}
if (z == true)
{
answers.Add(a2 - a1);
}
}
}
Console.WriteLine(answers.Max());
Console.ReadKey();
}
static bool f(int x, int a1, int a2)
{
return !((5 <= x && x <= 30) == (14 <= x && x <= 23)) || !(a1 <= x && x <= a2); // Формула из задачи с применением правила логики (А → В = !А || В)
}
}
}
//P = [5, 30] и Q = [14, 23]
// ((x ∈ P) ≡ (x ∈ Q)) → ¬(x ∈ A)
После его работы, ответ получаемый им - 8, а нужно получить 9
Я пробовал использовать код для другой подобной задачи и ответ, который я получил, подошел к ответу с сайта
Код такой же, но с изменённой функцией f:
static bool f(int x, int a1, int a2)
{
return !((a1 <= x && x <= a2) || (25 <= x && x <= 50)) || (!(a1<=x&&x<=a2) || (32<=x&&x<=47));
}
Ответы (1 шт):
Либо вы не правильно понимаете выражение "длина промежутка", либо в приведенном Вами примере ЕГЭ ошибка. В примере написано, что правильный ответ либо [5;14) либо (23;30]. Обратите внимание на круглые скобки. То есть 14 и 23 в ответ не входят. И если речь идет о множестве целых чисел, то правильный ответ можно записать как [5;13] или [24;30]. Их длины - 8 или 6, соответственно. А если считать в количестве возможных чисел, то 13-5+1=9 либо 30-24+1=7. В Вашем коде число 14 не подходит, что правильно. Но получается, что Ваш код возвращает ответ не в виде [a1;a2), а в виде [a1;a2]. То есть, надо прибавить единицу.
Но это если понятие "длина промежутка" эквивалентно понятию "количество целых чисел в промежутке". Если по другому, то ответ я не знаю. :)

