Всем привет.
Задача такая: "Пользователь вводит n-е кол-во отрезков и задаёт им по две координаты.
Необходимо найти сумму объединения отрезков.
Т.е. если я введу а(1,3),в(2,4) и с(8,10), то сумма будет равна 5.
Такой код у меня пока получился(проблемы возникают, когда программа доходит до условия положений двух отрезков) :
int n,i;
int a, b;
int t;
int sum;
//Пользователь вводит количество отрезков
Console.Write("Введите число отрезков: ");
n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
//Создаём массивы начал и концов отрезков
int[] begin = new int[n];
int[] end = new int[n];
//Пользователь вводит координаты отрезков, которые присваиваются ячейкам массивов
for( i = 0; i < n; i++)
{
Console.Write($"Введите 1-ю точку {i+1}-го отрезка: ");
a = Convert.ToInt32(Console.ReadLine());
Console.Write($"Введите 2-ю точку {i+1}-го отрезка: ");
b = Convert.ToInt32(Console.ReadLine());
begin[i] = a;
end[i] = b;
}
//Выделение общего
for(t = 0 ; t < n ; t++)
for (i = 0; i < n-1; i++)
{
begin[t] = begin[i];
end[t] = end[i];
if ((begin[i++] >= begin[t]) & (begin[i++] <= end[t]) & (end[i++] > end[t]))
{
begin[i++] = begin[t];
sum = end[i++] - begin[t];
Console.WriteLine($"1 {t}sum=" + sum);
}
else if ((begin[i++] > begin[t]) & (begin[i++] < end[t]) & (end[i++] <= end[t]))
{
begin[i++] = begin[t];
end[i++] = end[t];
sum = end[t] - begin[i++];
Console.WriteLine("2sum=" + sum);
}
else if ((begin[i++] < begin[t]) & (end[i++] <= end[t]) & (end[i++] >= begin[t]))
{
end[i++] = end[t];
sum = end[t] - begin[i++];
Console.WriteLine("3sum=" + sum);
}
else if ((end[i++] <= begin[t]) | ((begin[i++] >= end[t])))
{
sum = (end[t] - begin[t]) + (end[i++] - begin[i++]);
Console.WriteLine("4sum=" + sum);
}
else if ((begin[i++] < begin[t]) & (end[i++] > end[t]))
{
sum = end[i++] - begin[i++];
Console.WriteLine("5sum=" + sum);
}