Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам массива - C#
Формулировка задачи:
Всем доброго времени суток!,помогите пожалуйста решить вот такую задачу:
"Дан массив А из n точек.Найти наибольший периметр треугольника,вершины которого принадлежат различным точкам массива А,и сами эти точки(точки выводятся в том же порядке,к котором они перечислены при задании массива А)."
Заранее огромное спасибо.
P.S. Если честно , то я пытался её делать,но мне кажется алгоритм поиска точек не правильный..И я плохо себе представляю ,как реализовать динамический массив. У меня в задаче,как видите, сразу даётся два массива x,y из 6 элементов,а нужно чтобы точки вводились с клавиатуры и их было ровно столько,сколько захочет пользователь.В общем расчитываю только на помощь этого форума.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
const int n = 6;
int[] x = new int[n] { 2, 11, 5, -2, 5, -4 };
int[] y = new int[n] { 7, 13, 3, -5, 9, -1 };
int a, b, c,aB,bB,cB;
double P,PB;
aB = 0;
cB = 0;
bB = 0;
Console.WriteLine("Координаты точек: ");
for (int i = 0; i < n; i++)
{
Console.Write("({0},{1}) ", x[i], y[i]);
}
Console.WriteLine();
PB = 0;
for (a = 0; a < n - 2; a++)
for (b = a + 1; b < n - 1; b++)
for (c = b + 1; c < n; c++)
{
P = Math.Sqrt((x[b] - x[a])*(x[b] - x[a]) + (y[b] - y[a])*(y[b] - y[a]))
+ Math.Sqrt((x[c] - x[b])*(x[c] - x[b])+ (y[c] - y[b])* (y[c] - y[b]))
+ Math.Sqrt((x[c] - x[a])*(x[c] - x[a]) + (y[c] - y[a])*(y[c] - y[a]));
if (P > PB)
{
PB = P;
aB = a;
bB = b;
cB = c;
}
}
Console.WriteLine("Площадь большего треугольника равна {0:F4} И сами точки: ({1},{2}),({3},{4}),({5},{6})"
,PB, x[aB], y[aB], x[bB], y[bB],x[cB], y[cB]);
}
}
}Решение задачи: «Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам массива»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
namespace N
{
class Program
{
static void Main(string[] args)
{
var points = new Point[]
{
new Point(1, 2),
new Point(2, 3),
new Point(4, 5),
new Point(8,9),
new Point(10,12),
new Point(17,-17),
};
var tr = Triangle.GenerateTriangle(points);
Console.WriteLine("Количество треугольников {0}",tr.Length);
Console.WriteLine(tr.Max(q=>q.Perimets()));
Console.ReadKey();
}
}
struct Point
{
public int X { get; set; }
public int Y { get; set; }
public Point(int x,int y) : this()
{
X = x;
Y = y;
}
public override string ToString()
{
return string.Format("X={0} Y={1}", X, Y);
}
}
class Triangle
{
public Point[] points = new Point[3];
public Triangle(Point p1,Point p2,Point p3)
{
points[0] = p1;
points[1] = p2;
points[2] = p3;
}
public double Perimets()
{
return Lentgh(points[0], points[1]) + Lentgh(points[1], points[2]) + Lentgh(points[0], points[2]);
}
public double Lentgh(Point p1, Point p2)
{
return Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));
}
public static Triangle[] GenerateTriangle(Point[]points)
{
Random rnd=new Random(DateTime.Now.Millisecond);
List<Triangle> tl=new List<Triangle>();
for (int i = 0; i < points.Length; i++)
{
for (int j = i+1; j < points.Length; j++)
{
for (int k = j+1; k < points.Length; k++)
{
tl.Add(new Triangle(points[i],points[j],points[k]));
}
}
}
return tl.ToArray();
}
}
}