给出数组[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])
}
答案 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,最后一个数组中的位置。