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