Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам массива - C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток!,помогите пожалуйста решить вот такую задачу: "Дан массив А из n точек.Найти наибольший периметр треугольника,вершины которого принадлежат различным точкам массива А,и сами эти точки(точки выводятся в том же порядке,к котором они перечислены при задании массива А)." Заранее огромное спасибо. P.S. Если честно , то я пытался её делать,но мне кажется алгоритм поиска точек не правильный..И я плохо себе представляю ,как реализовать динамический массив. У меня в задаче,как видите, сразу даётся два массива x,y из 6 элементов,а нужно чтобы точки вводились с клавиатуры и их было ровно столько,сколько захочет пользователь.В общем расчитываю только на помощь этого форума.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApplication1
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. const int n = 6;
  13. int[] x = new int[n] { 2, 11, 5, -2, 5, -4 };
  14. int[] y = new int[n] { 7, 13, 3, -5, 9, -1 };
  15. int a, b, c,aB,bB,cB;
  16. double P,PB;
  17. aB = 0;
  18. cB = 0;
  19. bB = 0;
  20. Console.WriteLine("Координаты точек: ");
  21. for (int i = 0; i < n; i++)
  22. {
  23. Console.Write("({0},{1}) ", x[i], y[i]);
  24. }
  25. Console.WriteLine();
  26. PB = 0;
  27. for (a = 0; a < n - 2; a++)
  28. for (b = a + 1; b < n - 1; b++)
  29. for (c = b + 1; c < n; c++)
  30. {
  31. P = Math.Sqrt((x[b] - x[a])*(x[b] - x[a]) + (y[b] - y[a])*(y[b] - y[a]))
  32. + Math.Sqrt((x[c] - x[b])*(x[c] - x[b])+ (y[c] - y[b])* (y[c] - y[b]))
  33. + Math.Sqrt((x[c] - x[a])*(x[c] - x[a]) + (y[c] - y[a])*(y[c] - y[a]));
  34. if (P > PB)
  35. {
  36. PB = P;
  37. aB = a;
  38. bB = b;
  39. cB = c;
  40. }
  41. }
  42. Console.WriteLine("Площадь большего треугольника равна {0:F4} И сами точки: ({1},{2}),({3},{4}),({5},{6})"
  43. ,PB, x[aB], y[aB], x[bB], y[bB],x[cB], y[cB]);
  44. }
  45. }
  46. }

Решение задачи: «Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам массива»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace N
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             var points = new Point[]
  12.             {
  13.                 new Point(1, 2),
  14.                 new Point(2, 3),
  15.                 new Point(4, 5),
  16.                 new Point(8,9),
  17.                 new Point(10,12),
  18.                 new Point(17,-17),
  19.             };
  20.  
  21.             var tr = Triangle.GenerateTriangle(points);
  22.             Console.WriteLine("Количество треугольников {0}",tr.Length);
  23.  
  24.             Console.WriteLine(tr.Max(q=>q.Perimets()));
  25.             Console.ReadKey();
  26.  
  27.         }
  28.     }
  29.  
  30.     struct Point
  31.     {
  32.         public int X { get; set; }
  33.         public int Y { get; set; }
  34.  
  35.         public Point(int x,int y) : this()
  36.         {
  37.             X = x;
  38.             Y = y;
  39.         }
  40.  
  41.         public override string ToString()
  42.         {
  43.             return string.Format("X={0} Y={1}", X, Y);
  44.         }
  45.     }
  46.  
  47.     class Triangle
  48.     {
  49.         public Point[] points = new Point[3];
  50.         public Triangle(Point p1,Point p2,Point p3)
  51.         {
  52.             points[0] = p1;
  53.             points[1] = p2;
  54.             points[2] = p3;
  55.         }
  56.  
  57.         public double Perimets()
  58.         {
  59.             return Lentgh(points[0], points[1]) + Lentgh(points[1], points[2]) + Lentgh(points[0], points[2]);
  60.         }
  61.  
  62.         public double Lentgh(Point p1, Point p2)
  63.         {
  64.             return Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));
  65.         }
  66.  
  67.        public static Triangle[] GenerateTriangle(Point[]points)
  68.         {
  69.             Random rnd=new Random(DateTime.Now.Millisecond);
  70.  
  71.             List<Triangle> tl=new List<Triangle>();
  72.             for (int i = 0; i < points.Length; i++)
  73.             {
  74.                 for (int j = i+1; j < points.Length; j++)
  75.                 {
  76.                     for (int k = j+1; k < points.Length; k++)
  77.                     {
  78.                         tl.Add(new Triangle(points[i],points[j],points[k]));
  79.                     }
  80.                 }
  81.  
  82.             }
  83.             return tl.ToArray();
  84.         }
  85.     }
  86.  
  87. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы