.NET 4.x Поиск наибольшего вхождения точек в интервал - C#

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

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

Доброго времени суток, есть нестандартная задачка: Нужно найти интервалы, в которых расположены максимальное и минимальное количество точек. есть график, даны его точки:
Листинг программы
  1. 9 -1,55
  2. 25 3,8
  3. 39 4,6
  4. 113 -0,89
  5. 133 -0,94
  6. 156 4,03
  7. 165 3,68
  8. 219 -1,81
  9. 242 3,54
  10. 278 2,32
  11. 366 3,2
  12. 404 -3,49
  13. 489 0,11
  14. 535 0,2
  15. 556 2,3
  16. 573 -2,15
  17. 579 3,28
  18. 613 -3,61
  19. 717 1,9
  20. 718 -1,12
  21. 740 -0,4
  22. 772 3,12
  23. 839 3,24
  24. 870 0,09
  25. 907 -4,2
  26. 915 -2,52
  27. 918 2,24
  28. 924 -0,11
  29. 1086 3,11
  30. 1101 3,36
  31. 1185 -1,57
  32. 1196 3,22
  33. 1223 -2,7
  34. 1236 -4,09
  35. 1262 2,99
  36. 1333 -1,96
  37. 1339 -2,94
  38. 1349 -2,91
  39. 1366 -2,34
  40. 1386 4,81
  41. 1441 0,16
  42. 1536 2,71
  43. 1604 -3,12
  44. 1630 -0,15
  45. 1649 -4,45
  46. 1825 2,54
  47. 1855 -2,68
  48. 1856 -1,08
  49. 1943 -1,26
  50. 2017 -2,52
  51. 2049 3,95
  52. 2057 -2
  53. 2081 1,33
  54. 2109 -1,27
  55. 2133 3,29
  56. 2159 1,31
  57. 2162 -4,21
  58. 2186 3,9
  59. 2212 -0,31
  60. 2256 0,66
  61. 2295 -3,68
  62. 2298 2,97
  63. 2352 -4,49
  64. 2393 -0,12
  65. 2409 -3,03
  66. 2431 4,62
  67. 2438 0,1
  68. 2446 3,23
  69. 2456 -1,66
  70. 2504 -3,57
  71. 2557 2,32
  72. 2604 2,42
  73. 2703 -3,22
  74. 2705 -0,58
  75. 2736 2,81
  76. 2749 3,21
  77. 2764 4,51
  78. 2771 -2,22
  79. 2959 2,22
  80. 3023 2,71
  81. 3099 -0,03
  82. 3101 -3,34
  83. 3107 -3,27
  84. 3113 -0,45
  85. 3125 -2,03
  86. 3130 -1,68
  87. 3200 0,77
ось x и ось y соответственно по-оси y значения могут быть от -5 до 5 Сама идея:
Листинг программы
  1. Dictionary<int,Dictionary<int,double>> dic = new Dictionary<int, Dictionary<int, double>>();
  2. int i = 0;
  3. foreach (var line in jt)
  4. {
  5. int x = line["x"].Value<int>();
  6. var y = line["y"].Value<double>();
  7. if (dic.Count>0 && dic[i].Count >= 10&&(x- dic[i].Keys.Last()>24))
  8. {
  9. i += 1;
  10. }
  11. if (dic.ContainsKey(i))
  12. {
  13. dic[i].Add(x, y);
  14. }
  15. else
  16. {
  17. dic.Add(i,new Dictionary<int, double>{{x,y}});
  18. }
  19. }
Создаем словарь, в котором точки x и y группируются, по-заданным условиям, дальше нам надо найти ИНТЕРВАЛ ПО-ОСИ Y, на котором МАКСИМАЛЬНОЕ количество точек и минимальное количество точек. интервал ограничен 5 единицами, то есть:
Листинг программы
  1. -5<y<0; -4<y<1; -3<y<2; -2<y<3; -1<y<4; 0<y<5;
Заранее спасибо, третий день ломаю мозг.

Решение задачи: «.NET 4.x Поиск наибольшего вхождения точек в интервал»

textual
Листинг программы
  1.             var res = points.GroupBy(p => Math.Truncate(p.Y) + Math.Abs(p.Y)%1 < 0.5 ? 0 : 1).ToList();
  2.             var inters = new int[res.Count - 5];
  3.             for (int i = 0; i < inters.Length; i++)
  4.             {
  5.                 for (int j = 0; j < 5; j++)
  6.                 {
  7.                     inters[i] = res[i + j].Count();
  8.                 }
  9.             }
  10.  
  11.             var max = inters.Max();
  12.             var index = Array.IndexOf(inters, max);
  13.             Console.WriteLine("Победил интервал [{0}..{1}] с количеством цифр в интервале равному {2}", index - 5, index, max);

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


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

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

6   голосов , оценка 4.167 из 5

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

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

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