У меня есть массив целых чисел A
, обозначающий длину стороны треугольника. Мне нужно найти минимальную длину третьего возможного, если любые две стороны будут взяты из массива как две другие стороны.Поиск минимально допустимой третьей стороны треугольника
Теперь я знаю, что если третья сторона будет c
и две другие стороны будут a
и b(a>b)
минимальная сторона возможное c>a-b
или c=a-b+1
.
Я отсортировал массив и взял последовательное различие, чтобы найти возможную сторону. Однако я получаю неправильный ответ. Мой код выглядит следующим образом:
int n;
cin>>n; // stores length of sides of triangle
int a[n];
sort(a,a+n);
unsigned long long int min2 = numeric_limits<double>::infinity();
for(long long i=0;i<n-1;i++)
{
if ((a[i+1] - a[i] +1) <= min2)
min2 = a[i+1] - a[i] +1;
}
cout<<min2;
Для например - A = [2 2 2], так что минимум третья будет 1. Это правильно по мне, но не на тестовом случае мне неизвестно.
Где я делаю неправильно? Я думаю, что ошибка в +1
в условии if. Но я не могу понять.
пожалуйста обеспечивают [mcve] и скажите нам, что вход и выход вместе с ожидаемый результат. – user463035818
@ tobi303 В этом проблема. Я не знаю, где это происходит, потому что я не знаю ввода или ожидаемого вывода. – sammy
ха? откуда поступает вход? Если вы не знаете ответа, то ваш подход ошибочен. Вы должны сначала взять ручку и бумагу или сделать некоторые [чтение] (https://en.wikipedia.org/wiki/Triangle) только тогда, когда вы знаете, как его решить на бумаге, имеет смысл начать писать код. – user463035818