按此顺序重新排列数组

时间:2019-11-24 12:26:11

标签: c#

给出数组[1 2 3 4 5 6]

从前面开始写一个数字,从后面写一个第二个数字,以此类推

  

例如:123456将返回162534

     

130将返回103

我做到了,但是我在实现这一点的逻辑上有困难。 请帮助:

public int solution(int A) {
    // write your code in C# 6.0 with .NET 4.5 (Mono)

    string S = A.ToString();
    int [] intArray = new int[S.Length];

    for(int i=0; i < S.Length; i++)
        intArray[i] = int.Parse(S[i]);

    List<string> newCol = new List<string>();
        newCol.Add(intArray[0]);

    for(int i=1; i < intArray.Length; i++)
    {
        if ()
           newCol.Add(intArray[i])

    }

4 个答案:

答案 0 :(得分:0)

您应该检查数组中的元素数是偶数还是奇数,以便知道何时完成循环(因此1234567x的空白数没有问题,通常我们会检查该空白数-关于第x个位置)。现在声明一个临时数组temp,其大小为初始数组的大小,因此您将能够在其中保存新数据。然后,循环将从i=0开始(而不是i=1,因为n元素的数组索引为0, 1, 2, ..., n-1),并在输入数组长度的一半处结束。在循环内,使用第i个元素并将其保存在2*i中的第temp个位置,使用第n-1-i个元素并将其保存在2*i-1中-th个元素,然后迭代i。循环完成后,您的序列将完成。

答案 1 :(得分:0)

这是一些伪代码,它一次获取两个元素,我使用计数器K&J从头到尾获取元素。

string S = A.ToString(); 
char[] res = new char[S.Length];
int j = 1;
int k = 0;
 for(int i=0; i < S.Length; i++)
 { 
   res[i] = S[k];
   if (i + 1 > S.Length) break;
   res[i + 1] = S[S.Length - j,1];
   i+=1;
   j++;
   k++;
 }
 return res.ToString()

写在我的手机上,可能有错误,但应该可以给您带来启发。

降低这些基础知识并使用调试器,以确保您了解其实际工作原理。

答案 2 :(得分:0)

尝试一下。 for循环的简单方法

export const myRecordTyped: Record<MyRecordsIds, Entry> = myRecord; // The build fails here because the types are not compliant

答案 3 :(得分:0)

这是您可以执行此操作的一种方法:

var sourceArray = new[] { 1, 2, 3, 4, 5, 6 };    

var targetArray = Enumerable.Range(0, sourceArray.Length)
    .Select(sourceIndex => sourceArray[sourceIndex % 2 == 0 ? 
            sourceIndex / 2 : // even case, take from start
            sourceArray.Length - (sourceIndex + 1) / 2] // odd case, take from end
            );
// 1,6,2,5,3,4
Console.WriteLine(string.Join(',', targetArray));

因此,这里我们将源索引转换为所需的目标索引。

Enumerable.Range仅用于获取源索引的序列,因此在此示例中为0到5。然后,我们使用以下三元表达式将每个数字转换为目标索引:

条件:sourceIndex % 2 == 0是偶数吗?

如果是这样,sourceIndex / 2的目标索引就是该数字的一半。因此,0变为零,2变为1,4变为2,依此类推。因此,我们从数组开始处取其他所有数字。

如果不是,则目标为数组长度减去当前索引的一半+1。因此,给定源索引为1且数组长度为6,(6-1-+1 / 2)= 5,最后一个数组中的位置。