水平或垂直翻转2D阵列的有效方法

时间:2019-07-10 18:40:03

标签: c#

问题是要根据用户输入的内容,使程序水平(H)或垂直(V)翻转2D(2 x 2)数组。例如,如果用户输入“ HHHVVHVHV”,则意味着水平翻转5次,垂直翻转4次。我在下面附加的代码可以正常工作,但是我不确定C#中是否有内置方法可以翻转数组或更简单的方法。

using System;
using System.Linq;

namespace _2019JuniorQ4
{
    class Program
    {
        static void Main(string[] args)
        {
            //Varables
            int[,] grid = new int[2, 2] { { 1, 2 }, { 3, 4 } };
            int[,] flippedGrid = new int[2, 2];
            string input = "";
            int h = 0;
            int v = 0;
            int flipHorizontal = 0;
            int flipVertical = 0;
            //Input
            input = Console.ReadLine();
            //Count number of times
            for (int i=0; i<input.Length; i++)
            {
                if (input[i] == Convert.ToChar("H"))
                {
                    h++;
                }
                else if(input[i] == Convert.ToChar("V"))
                {
                    v++;
                }
            }
            //Process
            flipHorizontal = h % 2;
            flipVertical = v % 2;
            //Vertical flip
            if (flipVertical == 1)
            {
                for (int y = 0; y < 2; y++)
                {
                    for (int x = 1; x >= 0; x--)
                    {
                        flippedGrid[y, Math.Abs(x - 1)] = grid[y,x];
                    }
                }
                grid = flippedGrid.Clone() as int[,];
            }
            //Horizontal Flip
            if (flipHorizontal == 1)
            {
                for (int x = 0; x < 2; x++)
                {
                    for (int y = 1; y >= 0; y--)
                    {
                        flippedGrid[Math.Abs(y - 1), x] = grid[y,x];
                    }
                }
                grid = flippedGrid.Clone() as int[,];
            }
            //Output
            for (int x=0; x<2; x++)
            {
                for (int y=0; y<2; y++)
                {
                    Console.Write(grid[x,y]+" ");
                }
                Console.WriteLine();
            }           
        }
    }
}

0 个答案:

没有答案