Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам массива - 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д