C#练习题答案: 折叠数组矩阵【难度:2级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

折叠数组矩阵【难度:2级】:

答案1:

using System.Linq;

public class Kata
{
    public static int[] FoldArray(int[] array, int runs)
    {
        int length = array.Length/2;
    
        var folded = array.Take(length).Zip(array.Reverse().Take(length), (a, b) => a + b);
        
        if (array.Length%2 == 1)
        {
            folded = folded.Concat(new int[] { array[length] });
        }
        
        runs--;
    
        return runs == 0 ? folded.ToArray() : FoldArray(folded.ToArray(), runs);
    }
}

答案2:

using System.Linq;
using System.Collections.Generic;
using System;

public class Kata
{
  public static int[] FoldArray(int[] array, int runs)
  { 
    int half = (int)Math.Ceiling((double)array.Count() / 2);
    var firstHalf = array.Take(half).ToArray();
    var secondHalf = array.Skip(half).Take(half).Reverse().ToArray();
  
    for(int i = 0; i < secondHalf.Count(); i++){
      firstHalf[i] += secondHalf[i];
    }
  
    if (runs > 1)
      return FoldArray(firstHalf, runs-1);
    else
      return firstHalf;
  }
}

答案3:

using System;
using System.Collections.Generic;
using System.Linq;
public class Kata
{
  public static int[] FoldArray(int[] array, int runs)
  {
    List<int> arr = array.ToList();
            for (int c = 0; c < runs; c++)
            {
                int cou = arr.Count;
                for (int i = 0; i < (cou / 2); i++)
                {
                    arr[i] = arr[i] + arr[cou - i - 1];

                    arr.RemoveAt(cou - i - 1);
                }
            }
            return arr.ToArray();
  }
}

答案4:

using System;

public class Kata
{
  public static int[] FoldArray(int[] array, int runs)
  {    
    var length = (int)Math.Ceiling(array.Length/2.0);
    var foldedArray = new int[length];
    
    for(int i=0;i<length;i++)
    {
      if(i != array.Length -1 - i)
      {
        foldedArray[i] = array[i] + array[array.Length -1 - i];
      }
      else      
      {
        foldedArray[i] = array[i];
      }
    }
    
    if(runs == 1)
    {
      return foldedArray;
    }
    return FoldArray(foldedArray, runs - 1);
  }
}

答案5:

using System.Linq;
public class Kata {
  public static int[] FoldArray(int[] a, int runs)   
      =>  runs == 0 ? a : 
          FoldArray( Enumerable.Range(0, (int)(a.Length/2))
                             .Select(i=> a[i] + a[a.Length-i-1])
                             .ToList()
                             .Concat( (a.Length &amp; 1) == 1 ? new int[] {a[(a.Length-1)/2]}: new int[0]{})
                             .ToArray()
                            , runs-1);
}

答案6:

using System;
using System.Collections.Generic;
using System.Linq;
public class Kata
{
  public static int[] FoldArray(int[] array, int runs)
  {
    List<int> arr = array.ToList();
            while(runs != 0)
            {
                int len = arr.Count();
                bool check = len % 2 == 0 ? true : false;
                List<int> temp = new List<int>();
                if (check)
                {
                    int i = 0;
                    int j = arr.Count() - 1;
                    for (int k = 0; k < len / 2; ++k)
                    {
                        temp.Add(arr[i++] + arr[j--]);
                    }
                }
                else
                {
                    int i = 0;
                    int j = arr.Count() - 1;
                    for (int k = 0; k < len / 2; ++k)
                    {
                        temp.Add(arr[i++] + arr[j--]);
                    }
                    temp.Add(arr[len / 2]);
                }

                arr.Clear();
                arr = temp;
                runs--;
            }
            int[] _arr = arr.ToArray();
            return _arr;
  }
}

答案7:

public class Kata
{
  public static int[] FoldArray(int[] array, int runs)
  {
     for (int i=0;i<runs;i++) {
        int x,l=array.Length;
        int[] r=new int[(l>>1)+(l&amp;1)];
        for (x=0;x<l>>1;x++) r[x]=array[x]+array[l-1-x];
        if ((l&amp;1)==1) r[x]=array[x];
        array=r;
     }
     return array;
  }
}

答案8:

using System.Linq;
public class Kata
{
  public static int[] FoldArray(int[] array, int runs)
  {
     return --runs == 0 ? array.Length % 2 == 1? array.Take(array.Length / 2).Zip(array.Reverse().Take(array.Length / 2), (a, b) => a + b).Concat(new int[] { array[array.Length / 2] }).ToArray() : array.Take(array.Length / 2).Zip(array.Reverse().Take(array.Length / 2), (a, b) => a + b).ToArray() : FoldArray(array.Length % 2 == 1 ? array.Take(array.Length / 2).Zip(array.Reverse().Take(array.Length / 2), (a, b) => a + b).Concat(new int[] { array[array.Length / 2] }).ToArray() : array.Take(array.Length / 2).Zip(array.Reverse().Take(array.Length / 2), (a, b) => a + b).ToArray(), runs);
   }
}

答案9:

using System;
using System.Linq;

public class Kata
{
  public static int[] FoldArray(int[] a, int runs)
  {
    if(runs == 0) return a;
    int l = a.Length / 2 + a.Length % 2;
    
    var fold = a
      .Take(l)
      .Select((n, i) => {
        int f = a.Length - i - 1;
        if(i == f) return n;
        return n + a[f];
      });
    
    return FoldArray(fold.ToArray(), runs - 1);
  }
}

答案10:

using System.Collections.Generic;

public class Kata {
  public static int[] FoldArray(int[] array, int runs) {
    if (runs == 0) {
      return array;
    }
    
    List<int> newArray = new List<int>();
    
    for (int i = 0; i < (array.Length / 2); i++) {
      newArray.Add(array[i] + array[array.Length - 1 - i]);
    }
    
    if (array.Length % 2 != 0)
      newArray.Add(array[(array.Length / 2)]);
      
    return Kata.FoldArray(newArray.ToArray(), runs - 1);
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值