Вопрос или проблема
Сценарий проблемы:
Сортировка полезна как первый шаг во многих различных задачах. Самая распространенная задача – облегчить поиск объектов, но есть и другие применения. В данном случае это упростит определение пары или пар элементов с наименьшей абсолютной разницей между ними.
Пример: arr = [5, 2, 3, 4, 1] Сортированный, arr’ = [1, 2, 3, 4, 5]. Несколько пар имеют минимальную разницу 1: [(1, 2), (2, 3), (3, 4), (4, 5)]. Верните массив [1, 2, 2, 3, 3, 4, 4, 5].
Примечание: Как показано в примере, пары могут пересекаться. Дана неотсортированная список целых чисел, arr, найдите пару элементов с наименьшей абсолютной разницей между ними. Если есть несколько пар, найдите их все.
Формат ввода: Первая строка содержит одно целое число n, длину arr. Вторая строка содержит n целых чисел, разделенных пробелами, arr[i].
Пример ввода 0:
10
-20 -3916237 -357920 -3620601 7374819 -7330761 30 6246457 -6461594 266854
Пример вывода 0:
-20 30
Объяснение 0: (30) – (-20) = 50, что является наименьшей разницей.
Пример ввода 1:
12
-20 -3916237 -357920 -3620601 7374819 -7330761 30 6246457 -6461594 266854 -520 -470
Пример вывода 1:
-520 -470 -20 30
Объяснение 1: (-470) – (-520) = 30 – (-20) = 50, что является наименьшей разницей.
сортировка списка с использованием ввода от пользователя
Ответ или решение
Вот решение задачи на C# с использованием классов и методов, которое позволяет находить пары элементов с наименьшей абсолютной разницей:
using System;
using System.Collections.Generic;
using System.Linq;
public class PairFinder
{
public List<int> FindPairsWithMinimumDifference(int[] arr)
{
Array.Sort(arr); // Сортируем массив
int minDifference = int.MaxValue;
List<int> resultPairs = new List<int>();
// Ищем минимальную разницу
for (int i = 1; i < arr.Length; i++)
{
int difference = arr[i] - arr[i - 1];
if (difference < minDifference)
{
minDifference = difference;
resultPairs.Clear();
resultPairs.Add(arr[i - 1]);
resultPairs.Add(arr[i]);
}
else if (difference == minDifference)
{
resultPairs.Add(arr[i - 1]);
resultPairs.Add(arr[i]);
}
}
return resultPairs;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите длину массива (n):");
int n = int.Parse(Console.ReadLine());
Console.WriteLine("Введите элементы массива, разделенные пробелом:");
int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
PairFinder pairFinder = new PairFinder();
List<int> result = pairFinder.FindPairsWithMinimumDifference(arr);
Console.WriteLine("Пары с минимальной абсолютной разницей:");
for (int i = 0; i < result.Count; i += 2)
{
Console.WriteLine($"({result[i]}, {result[i + 1]})");
}
}
}
Объяснение кода:
-
Создан класс
PairFinder
, который содержит методFindPairsWithMinimumDifference
. Этот метод принимает массив целых чисел, сортирует его и находит пары с наименьшей абсолютной разницей. -
Мы используем сортировку массива для упрощения поиска минимальной разницы. После сортировки разница между соседними элементами будет наименьшей, так как все элементы упорядочены.
-
Метод проходит через отсортированный массив, вычисляет разницу между соседними элементами и отслеживает минимальную разницу и соответствующие пары.
-
В классе
Program
реализован методMain
, который принимает ввод от пользователя для длины массива и самих элементов. Затем он вызывает методFindPairsWithMinimumDifference
и выводит найденные пары на экран.
Примеры ввода/вывода:
-
Если пользователь вводит
10
и-20 -3916237 -357920 -3620601 7374819 -7330761 30 6246457 -6461594 266854
, программа выведет:Пары с минимальной абсолютной разницей: (-20, 30)
-
Если ввод:
12
и-20 -3916237 -357920 -3620601 7374819 -7330761 30 6246457 -6461594 266854 -520 -470
, то программа выведет:Пары с минимальной абсолютной разницей: (-520, -470) (-20, 30)
Редактируйте ввод в соответствии с вашими требованиями и проверьте функциональность программы.