gpt4 book ai didi

c# - 改变数组中的元素

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:46 24 4
gpt4 key购买 nike

为了找出合适的算法,我已经为这个不寻常的任务困惑了几天。假设我有二维数组:

int[][] jagged = new int[4][];
jagged[0] = new int[4] { 1, 2, 3, 4 };
jagged[1] = new int[4] { 5, 6, 7, 8 };
jagged[2] = new int[4] { 9, 10, 11, 12 };
jagged[3] = new int[4] { 13, 14, 15, 16 };

我怎样才能逆时针旋转这个矩阵,如下所示?

1  2  3  4             2 3 4 8           3 4 8 12
5 6 7 8 --> 1 7 11 12 --> 2 11 10 16
9 10 11 12 5 6 10 16 1 7 6 15
13 14 15 16 9 13 14 15 5 9 13 14

二维数组可以有不同的维度。我的意思是 2x3 或 3x4。

我试过使用以下算法,但它只旋转了 90 度:

int [,] newArray = new int[4,4];

for (int i=3;i>=0;--i)
{
for (int j=0;j<4;++j)
{
newArray[j,3-i] = array[i,j];
}
}

如果我改变增量,那么它什么也不会给我。也许还有其他解决方案?

最佳答案

假设数组的每个“正方形”独立旋转。
您可以使用以下代码片段:

const int ArraySize = 4;
int[,] array =
{
{ 2, 3, 4, 8 },
{ 1, 7, 11, 12 },
{ 5, 6, 10, 16 },
{ 9, 13, 14, 15 }
};

for (int r = (ArraySize - 1) / 2; r >= 0; r--)
{
int start = r;
int end = ArraySize - r - 1;
int saveTopLeft = array[start, start];

// Top
for (int i = start; i <= end - 1; i++)
array[start, i] = array[start, i + 1];

// Right
for (int i = start; i <= end - 1; i++)
array[i, end] = array[i + 1, end];

// Bottom
for (int i = end; i >= start + 1; i--)
array[end, i] = array[end, i - 1];

// Left
for (int i = end; i >= start + 2; i--)
array[i, start] = array[i - 1, start];

// Saved element
array[start + 1, start] = saveTopLeft;
}

关于c# - 改变数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42496192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com