Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按此顺序重新排列数组_C# - Fatal编程技术网

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
),然后在第一次迭代中