Массивы содержат значения координат точек на плоскости
Массивы содержат вещественные числа.
=============
У каждой точки две(три, четыре и более координат) Зависит от плоскости и пространства. Следовательно первый массив содержит значения X, второй массив Y. Итого получается N известных точек, по которым нужо провести анализ по периметрам треугольников в двумерной плоскости. Это N задано условием.
============

Я Правильно понял? Если правильно, то проверка одинаковых точек легко выполняется(и без помощи) и может смогу помочь кодом. Код Visual Studio. В скобках точки, правее три длины отрезков по трем левым точкам.

Код

#include <iostream>
#include <ctime>
#include <cmath>

using namespace std;

struct tpoint{double x,y;}; //для корректного сложения сторон

void show(double *a,double *b,int N)  //для себя показывал массив
{
    for (int i=0;i<N;i++)
    {
        cout<<a[i]<<"  "<<b[i]<<endl;
    }
}

void create(double *a,double *b,int N) //создание массива
{
for (int i=0;i<N;i++)
{
     a[i]=i;
     b[i]=i+N;
}
}

double perimetr(double x,double y,double z) //функция периметра
{
    return x+y+z;
}

void get(double *a,double *b,int N) //Поиск трех злостных точек
{
    double len1,len2,len3; //длины отрезков на трех точках
    double sum=0; //максимальный периметр
    tpoint T1,T2,T3; //три точки


    for (int i=0;i<N;i++)  //Анализ всех комбинаций для построения треугольиков
        for (int j=i+1;j<N;j++)
            for (int k=j+1;k<N;k++)
    {
//Вывод на экран длин трех отрезков
      cout<<"("<<a[i]<<";"<<b[i]<<")   ("<<a[j]<<";"<<b[j]<<")   ("<<a[k]<<";"<<b[k]<<")"<<
         "\t  ";
      cout<<sqrt(pow(fabs(a[i]-a[j]),2)+pow(fabs(b[i]-b[j]),2))<<"   ";
      cout<<sqrt(pow(fabs(a[j]-a[k]),2)+pow(fabs(b[j]-b[k]),2))<<"   ";
      cout<<sqrt(pow(fabs(a[k]-a[i]),2)+pow(fabs(b[k]-b[i]),2))<<"   ";
//Запомиание длин в переменные
      len1=sqrt(pow(fabs(a[i]-a[j]),2)+pow(fabs(b[i]-b[j]),2));
      len2=sqrt(pow(fabs(a[j]-a[k]),2)+pow(fabs(b[j]-b[k]),2));
      len3=sqrt(pow(fabs(a[k]-a[i]),2)+pow(fabs(b[k]-b[i]),2));
//вот тут сравниваем периметр с максимальным на данный момент периметром и если новый больше текущего, запоминаем точки и новый периметр  
      if (perimetr(len1,len2,len3)>sum)
      {
          T1.x=a[i]; T2.x=a[j]; T3.x=a[k];
          T1.y=b[i]; T2.y=b[j];    T3.y=b[k];
          sum=perimetr(len1,len2,len3);
      };

      cout<<endl;

    
       }
//Выводим инфу на экран
            cout<<"НАЙДЕНЫ ТОЧКИ"<<endl;
            cout<<T1.x<<"  "<<T1.y<<endl;
            cout<<T2.x<<"  "<<T2.y<<endl;
            cout<<T3.x<<"  "<<T3.y<<endl;
            cout<<"ПЕРиМЕТР ТРЕУГОЛЬНИКА  =  "<<sum<<endl;
}

void main()
{
system("CLS");
double *Arr1,*Arr2;
int N=9;
Arr1=new double[N];
Arr2=new double[N];

create(Arr1,Arr2,N); //Создание массива из N элементов
show(Arr1,Arr2,N); //отображение массива на экране
get(Arr1,Arr2,N); //Поис злых точек

delete []Arr1; //освобождение памяти
delete []Arr2;

}


Если подойдет, то немного совсем доработать, если нет, то условие неоднозначое очень.