我会这样做:
someArray[4] = your input.
someBigArray[n][m];
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(i < n/2)
if(j < m/2)
someBigArray[n][m] = (char)(someArray[0] + offsetASCIIToA)
else
someBigArray[n][m] = (char)(someArray[1] + offsetASCIIToA)
else
if(j < m/2)
someBigArray[n][m] = (char)(someArray[2] + offsetASCIIToA)
else
someBigArray[n][m] = (char)(someArray[3] + offsetASCIIToA)
}
}
这是一个伪代码解决方案。您可以针对边界情况和其他情况进行调整。我只是让整数除法来决定你的边界情况,这是最有意义的,也是最简单的,但你可以用一些小的方式修改逻辑,使其表现得像你想要的那样。您还可以在多个 for 循环中包含逻辑,如果 i = n/2、j = m/2、i < m/2 以此类推,以此类推,则使用组合。这稍微更高性能(更少的分支),但更多的代码。每个解决方案都是 O(m * n)。下面的解决方案概述了这种可能的逻辑。
for(int i = 0; i < n/2; i++)
for(int j = 0; j < m/2; j++)
someBigArray[n][m] = (char)(someArray[0] + offsetASCIIToA)
for(int i = n/2; i < n; i++)
for(int j = 0; j < m/2; j++)
someBigArray[n][m] = (char)(someArray[1] + offsetASCIIToA)
for(int i = 0; i < n/2; i++)
for(int j = m/2; j < m; j++)
someBigArray[n][m] = (char)(someArray[2] + offsetASCIIToA)
for(int i = n/2; i < n; i++)
for(int j = m/2; j < m; j++)
someBigArray[n][m] = (char)(someArray[3] + offsetASCIIToA)
您现在所要做的就是弄清楚将 someArray 中的值转换为相应的字符值。只需查找 ASCII 表以获取此信息,并使用强制转换。
注意:这是对您的问题的一些假设。我觉得你的例子可能特别差。如果您的数组可能是 5 个值,您如何修改它可能被定义的方式太多,我无法深入了解我将如何解决它。