Napisałem w C#, ale powinieneś zrozumieć.
W pętli for
wybieraj cyfry na zmianę od lewej do środka i od prawej do środka. Lewym indeksem do pobrania cyfry będzie zmienna pętli, a prawy indeks będzie obliczany. Jeśli indeksy spotkają się w środku (czyli będą równe), to nie rób nic - to będzie ostatni krok pętli w przypadku parzystej ilości cyfr.
int Shuffle(int input)
{
string inputString = input.ToString(), outputString = "";
for (int leftIndex = 0; leftIndex < inputString.Length / 2 + 1; leftIndex++)
{
outputString += inputString[leftIndex];
int rightIndex = inputString.Length - leftIndex - 1;
if (leftIndex != rightIndex)
{
outputString += inputString[rightIndex];
}
}
return int.Parse(outputString);
}
Czytelniejszy, ale mniej wydajny sposób polega na przeniesieniu pierwszej cyfry z wejściowej liczby do wyniku i odwracaniu kolejności cyfr w wejściowej liczbie w każdym kroku aż do wyczerpania wszystkich cyfr:
int Shuffle(int input)
{
IEnumerable<char> inputCollection = input.ToString().ToCharArray();
string output = "";
while (inputCollection.Count() > 0)
{
output += inputCollection.ElementAt(0);
inputCollection = inputCollection.Skip(1).Reverse();
}
return int.Parse(output);
}