C# 按此顺序重新排列数组
给定数组C# 按此顺序重新排列数组,c#,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.Lengt
[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])
}
public int解决方案(int A){
//用C#6.0和.NET4.5(Mono)编写代码
字符串S=A.ToString();
int[]intArray=新的int[S.Length];
对于(int i=0;i你应该检查数组中的元素数是偶数还是奇数,以便知道何时完成循环(所以12345×67 x对正常检查的空白数没有问题-我说的是第X位)。。现在声明一个临时数组
temp
,大小与初始数组相同,这样就可以在那里保存新数据。然后,循环将从i=0
开始(而不是i=1
,因为n
元素的数组索引是0,1,2,…,n-1
)在循环中,取i
-th元素并将其保存在temp
中的2*i
-th位置,取n-1-i
-th元素并将其保存在2*i-1
-th元素中,然后迭代i
。循环完成后,您的序列将完成。您应该D检查数组中的元素数是偶数还是奇数,以便知道何时完成循环(因此12345×67 x与正常检查的空白数没有问题-我说的是第X位置)。。现在声明一个临时数组temp
,大小与初始数组相同,这样就可以在那里保存新数据。然后,循环将从i=0
开始(而不是i=1
,因为n
元素的数组索引是0,1,2,…,n-1
)在循环中,取i
-th元素并将其保存在temp
中的2*i
-th位置,取n-1-i
-th元素并将其保存在2*i-1
-th元素中,然后迭代i
。循环完成后,您的序列将完成。这里是示例ome psuedo代码,它一次获取两个元素,我使用计数器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()
string S=A.ToString();
char[]res=新字符[S.Length];
int j=1;
int k=0;
对于(int i=0;iS.Length)中断;
res[i+1]=S[S.Length-j,1];
i+=1;
j++;
k++;
}
return res.ToString()
写在我的手机上,可能有bug,但应该给你一个想法
了解这些基本原理并使用调试器确保您了解它的实际工作原理。这里是一些psuedo代码,它一次获取两个元素,我使用计数器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()
string S=A.ToString();
char[]res=新字符[S.Length];
int j=1;
int k=0;
对于(int i=0;iS.Length)中断;
res[i+1]=S[S.Length-j,1];
i+=1;
j++;
k++;
}
return res.ToString()
写在我的手机上,可能有bug,但应该给你一个想法
了解这些基本原理并使用调试器确保您了解它的实际工作原理。试试这个。使用for循环的简单方法
public int solution(int A) {
var charArray=A.ToString().ToCharArray();
StringBuilder sb=new StringBuilder();
for(int i=0,j=charArray.Length-1; i<=j; i++,j--)
{
//Console.WriteLine(" ("+i+","+j+")");
sb.Append(charArray[i]);
if(i!=j)
sb.Append(charArray[j]);
//Console.WriteLine(sb.ToString());
}
return (Int32.Parse(sb.ToString()));
}
public int解决方案(int A){
var charArray=A.ToString().ToCharArray();
StringBuilder sb=新的StringBuilder();
for(inti=0,j=charArray.Length-1;i试试这个。一个简单的for循环方法
public int solution(int A) {
var charArray=A.ToString().ToCharArray();
StringBuilder sb=new StringBuilder();
for(int i=0,j=charArray.Length-1; i<=j; i++,j--)
{
//Console.WriteLine(" ("+i+","+j+")");
sb.Append(charArray[i]);
if(i!=j)
sb.Append(charArray[j]);
//Console.WriteLine(sb.ToString());
}
return (Int32.Parse(sb.ToString()));
}
public int解决方案(int A){
var charArray=A.ToString().ToCharArray();
StringBuilder sb=新的StringBuilder();
对于(inti=0,j=charArray.Length-1;i有一种方法可以实现这一点:
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,则为数组中的最后一个位置。有一种方法可以做到这一点:
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,数组中的最后一个位置。实现这一点的一种方法是:迭代数组的一半(intArray.length/2
),在第一次迭代中取第一个和最后一个数字,然后在第二次迭代中取第二个第一个和第二个最后一个,因此实现这一点的一种方法是:在数组的一半上迭代(intArray.Length/2
),然后在第一次迭代中