Что я пытаюсь сделать, так это создать функцию, которая будет переставлять строку чисел от 1234 до 4321. Я уверен, что есть намного более эффективные способы сделать это, чем мой метод, но я просто хочу понять, что пошло не так с тем, что я сделал, потому что я новичок в программировании и могу использовать знания для улучшения.
Моего мыслительный процесса для кода был:Изменение строки чисел от наивысшего до самого низкого C#
- найти наибольшее число в введенной строке
- добавить наибольшее число в список
- удалить наибольшее число из введенной строки
- находит самое большое число из строки (теперь короче)
Итак, я создал функцию, которая нашла наибольшее число в строке, и она отлично работала:
static int LargestNumber(string num)
{
int largestnumber = 0;
char[] numbers = num.ToCharArray();
foreach (var number in numbers)
{
int prevNumber = (int) char.GetNumericValue(number);
if (prevNumber >= largestnumber)
{
largestnumber = prevNumber;
}
}
return largestnumber;
}
Теперь функцию перегруппировки является то, что я имею проблемы с:
static List<int> Rearrange(string num)
{
List<int> rearranged = new List<int>(); // to store rearranged numbers
foreach (var number in num) //for every number in the number string
{
string prevnumber = number.ToString(); // the previous number in the loop
if (prevnumber == LargestNumber(num).ToString()) // if the previous number is the larges number in the inputted string (num)
{
rearranged.Add(Convert.ToInt32(prevnumber)); // put the previous number into the list
// removing the previous number (largest) from the inputted string and update the inputted string (which should be now smaller)
StringBuilder sb = new StringBuilder(num);
sb.Remove(num.IndexOf(number), 1);
num = sb.ToString();
}
}
return rearranged; // return the final rearranged list of numbers
}
Когда я запускаю этот код (фиксированный для конкатенации):
var rearranged = Rearrange("3250");
string concat = String.Join(" ", rearranged.ToArray());
Console.WriteLine(concat);
Все, что я получаю :
5
Я не уверен, что мне не хватает или что я делаю неправильно - код, кажется, не возвращается после удаления «5», который является самым большим числом, а затем удаляет следующий самый высокий номер/
Имеет ли это что-нибудь связанное с [Правило Капрекара] (https://www.reddit.com/r/dailyprogrammer/comments/56tbds/20161010_challenge_287_easy_kaprekars_routine/)? Если это так, вы можете проверить [способ, которым я это сделал] (https://www.reddit.com/r/dailyprogrammer/comments/56tbds/20161010_challenge_287_easy_kaprekars_routine/d8nedm0) :) – itsme86
'var ordered = New String (nums.AsEnumerable () .OrderByDescending (q => Convert.ToInt32 (q)). ToArray()) ' – Plutonix
@Plutonix, конечно, OP не запрашивает решение в инфраструктуре, а скорее то, что не так с их попыткой алгоритма. –