C# Sort Numbers Arrays

Привет,

Имам затруднение със следната задача:

Sort Numbers

Write a program that reads a list of numbers separated by a comma and space.

Arrange the numbers in descending order.

Output all numbers on a single line, separated by a comma and a space.

Input

  • On the only line you will receive all the numbers to be sorted.

Output

  • On the only line of output, print all the numbers sorted in format n1, n2, n3, .. n

Input

2, 3, 1, 5, 6

Output

6, 5, 3, 2, 1

Input

1, 2, 3

Output

3, 2, 1

Потърсих помощ от Интернет и в крайна сметка решението ми е следното:

using System;

namespace SortNumbers.Arrays
{
class Program
{
static void Main()
{

        string nums = Console.ReadLine();
        string[] elements = nums.Split(',');

        int[] numbers = new int[elements.Length];
        Array.Sort(elements);

        for (int i = numbers.Length - 1; i >= 0; i--)
        {
            
            numbers[i] = int.Parse(elements[i]);
            
            Console.Write(numbers[i] + ", ");
        }

    }
}

}

Проблемът е, че, когато сортира, изкарва двойката най-отпред и след това 6, 5, 3, 1.

Защо тази двойка излиза първа? Нещо не сортирам правилно ли? Ще съм благодарен, ако някой сподели решение с масив.

Здравей,

Не разбрах за коя 2ка става въпрос, но това, което ми прави впечатление на пръв поглед е, че сортираш масива преди да си го обърнал от String на int, т.е. ако имаш инпут да кажем “5, 6, 10, 15”, ще ти го сортира така: “10, 15, 5, 6”, третирайки елементите като стрингове.

Второто е, че след всяко число принтираш ", " ,т.е. и след последното число ще има запетайка, което ти гарантира wrong answer на всичките тест кейсове. Можеш да го заобиколиш като зададеш например когато в цикъла си на i = 0 , да отпечатва само numbers[i].

Успех:)

Благодаря за отзивчивостта!

Когато сортирам след преобразуването на низовете в цели числа, както е посочено по-долу:

string nums = Console.ReadLine();
string[] elements = nums.Split(’,’);

        int[] numbers = new int[elements.Length];
        

        for (int i = numbers.Length - 1; i >= 0; i--)
        {
            
            numbers[i] = int.Parse(elements[i]);
            Array.Sort(elements);

            Console.Write(numbers[i] + ", ");
        }

Резултатът ми при въвеждане на " 2, 3, 1, 5, 6", както е по условие, е " 6, 6, 5, 3, 1".
Тази втора шестица не зная от къде се взе…И двойката ми е изядена.

Чакай, това сортиране не трябва да се случва в loop-a:)
Мога да ти кажа къде отива 2ката, но ще те объркам повече - ако дебъгнеш, ще видиш :)))

По-скоро виж алгоритъмът на решението как трябва да е. Да кажем, първо получаваш един масив от String. После правиш 1 loop, който минава през елеметите на този масив и ги обръща в int, като ги записва в нов масив от int. После сортираш масива от int. Накравя още 1 loop за печатането:)

1 Like

Благодаря за насоките, ето и 100/100 решението:

Нямаше да се сетя да го направя по този начин. Сега ще мина през всяка една стъпка, за да схвана логиката.

1 Like