SCloudQ Ответов: 3

Как вывести 3 наименьших числа из списка?


Цель программы-отобразить 3 наименьших числа из списка, предоставленного пользователем.

Проблема, с которой я столкнулся:
При выполнении, когда я ввожу список, разделенный запятыми, например, 5,1,9,2,10. Я вернусь, 1, 10 и 2. Вместо того, чтобы вернуться 1, 2 и 5.

Что я уже пробовал:

public void MinimumThree()
        {
            var min = 100;
            Console.WriteLine("Enter a list of numbers (seperated by ,): ");

            string input = Console.ReadLine();

            string errorMessage = "Invalid List. Try Again: ";

            bool loopContinue = true;

            while (loopContinue == true)
            {
                string[] list = input.Split(',');
                if (input == " " || list.Count() < 5)
                {
                    Console.Write(errorMessage);
                    input = Console.ReadLine();
                }
                else
                {
                    loopContinue = false;
                    Console.WriteLine();
                    
                    // Convert list elements to int
                    for (var i = 0; i < list.Length; i++)
                    {
                        int.Parse(list[i]);
                    }

                    foreach (var x in list)
                    {
                        Console.WriteLine(x);
                    }

                    // Sort list
                    Array.Sort(list);

                    // Print 3 smallest 
                    Console.WriteLine("Three smallest numbers: ");
                    for (var i = 0; i < 3; i++)
                    {
                        Console.WriteLine(list[i]);
                    }
                }
            }
        }
    }

3 Ответов

Рейтинг:
25

Kenneth Haugland

Я почти уверен, что int.Parse-это функция, а не суб. Возможно, вы захотите пойти на int.Вместо этого попробуйте выполнить анализ, чтобы убедиться, что ваш ввод на самом деле является int.

Похоже, что вы сортируете 10 как 1 и сортируете его в соответствии с его значением char, как словарь.

Попробовать это:

string aa = "1";
string bb = "10";
string cc = "5";

int[] IntList = new int[3];
IntList[0] = int.Parse(aa);
IntList[1] = int.Parse(bb);
IntList[2] = int.Parse(cc);

Array.Sort(IntList);


Рейтинг:
19

W∴ Balboos, GHB

Вы получаете результаты, отсортированные в виде символьных строк.

Когда вы вводите значения из консоли, они имеют тип char, а не тип int.
Вам нужно взять свой список и преобразовать его члены в массив значений int, которые должны быть сохранены в их собственном массиве и отсортированы - или - создать альтернативную функцию сортировки для сортировки, которая внутренне сравнивает их как значения int.


Рейтинг:
10

Patrice T

Этот

int.Parse(list[i]);

переводит каждую строку в int, но что вы делаете с полученными ints ?

Об алгоритме: чтобы найти 3 наименьших числа, вам не нужно хранить весь список в массиве и сортировать его.
Вам просто нужно 3 переменные или массив размером 3 и хранить только 3 наименьших числа, когда вы читаете числа из списка.
Если это кажется вам слишком сложным, начните с программы, чтобы получить наименьшее число, затем постройте на ней, чтобы получить 2 наименьших числа, и закончите с 3 наименьшими числами.
Удаление необходимости сортировки - это большая экономия времени для большого списка.