Найти два различных числа в массиве, сумма которых наиболее близка к заданному числу - C#
Формулировка задачи:
//Дан массив и число "p". Найдите два различных числа в массиве, сумма которых наиболее близка к "p". Проблема в том, что я заранее присваиваю большое значение, но мне не нравится как это реализовано
Листинг программы
- int[] array37 = new int[20];
- Random randNumb = new Random();
- int p = 14;
- int sumClose = 100;
- int min = 0;
- int index1 = 0, index2 = 0;
- int intermediateStep = 0;
- for(int i = 0; i < array37.Length; i++)
- {
- array37[i] = randNumb.Next(0, 11);
- }
- foreach(int show in array37)
- {
- Console.WriteLine(show);
- }
- Console.WriteLine();
- for(int i = 0; i < array37.Length; i++)
- {
- for(int j = 0; j < array37.Length; j++)
- {
- if(i == j)
- {
- continue;
- }
- intermediateStep = array37[i] + array37[j];
- min = p - intermediateStep;
- if(Math.Abs(min) <= sumClose)
- {
- index1 = i;
- index2 = j;
- sumClose = min;
- }
- }
- }
- Console.WriteLine(array37[index1] + " " + array37[index2]);
- Console.WriteLine(sumClose);
- Console.ReadKey();
Решение задачи: «Найти два различных числа в массиве, сумма которых наиболее близка к заданному числу»
textual
Листинг программы
- int[] array = { 1, 2, 5, 6, 6, 8, 9 };
- int desiredSum = 12;
- var solution = array.Distinct()
- .SelectMany(e => array.Select(k => Tuple.Create(e, k)))
- .Where(e => e.Item1 != e.Item2)
- .OrderBy(e => Math.Abs(e.Item1 + e.Item2 - desiredSum))
- .First();
- Console.WriteLine($"{solution.Item1} {solution.Item2}");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д