Переставить большую цифру с меньшей предыдущей в числе местами
``Столкнулся с задачей - Найти ближайшую большую целую цифру в числе и переставить её местами с предыдущей, если таковой нет (то есть по факту, если number < 1, то результат null). То есть : 23 - манипуляция - 32 и то же самое 4056 - манипуляция - 4065 , то есть срабатывает только 1 раз. Не понимаю как это сделать в отсутствии Stack и List. Пытался написать что-то по типу int[] array = number.Select(x => x).ToArray(), но это скорее какой-то бред.
Пустой метод выглядит вот так
public static int? TheBiggest(int number)
{
}
Код :
char[] digit = number.ToString().ToArray();
for (int i = 0; i < digit.Length; i++)
{
if (digit[i] < digit[i + 1])
{
char temp = '0';
temp = digit[i];
digit[i] = digit[i + 1];
digit[i + 1] = temp;
break;
}
else
{
return null;
}
}
//конвертирование и вывод данных?
Ответы (1 шт):
Автор решения: Qwertiy
→ Ссылка
using System;
using System.Linq;
public class Test
{
private static int? SwapMax(int n)
{
var a = n.ToString().ToCharArray();
var c = a.Max();
var i = Array.IndexOf(a, c);
if (i == 0) return null;
a[i] = a[i-1];
a[i-1] = c;
return int.Parse(new String(a));
}
public static void Main()
{
foreach (var n in new int[] {23, 32, 4056, 4056456, 8, 99, 89, 98, 103})
Console.WriteLine("{0} => {1}", n, SwapMax(n));
}
}
23 => 32
32 =>
4056 => 4065
4056456 => 4065456
8 =>
99 =>
89 => 98
98 =>
103 => 130
PS: Если linq нельзя, придётся максимум самому написать.