Найти два различных числа в массиве, сумма которых наиболее близка к заданному числу - 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}");