【发布时间】:2017-01-04 12:24:23
【问题描述】:
我的数组长度为 1D m。说 m = 16
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
我实际解释数组的方式是 n x n = m
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
由于我的物理环境设置方式,我需要以这种方式读取数组
0 4 8 12 13 9 5 1 2 6 10 14 15 11 7 3
我想出的作品,但我真的不认为这是最好的方法:
bool isFlipped = true;
int x = 0; x < m; x++
if(isFlipped)
newLine[x] = line[((n-1)-x%n)*n + x/n)]
else
newLine[x] = line[x%n*n +x/n]
if(x != 0 && x % n == 0)
isFlipped = !isFlipped
这给了我所需的结果,但我真的认为有一种方法可以通过纯粹使用数学公式来摆脱这个布尔值。我把它塞进一个 8kb 的微控制器中,我需要尽可能多地节省空间,因为稍后我将进行一些蓝牙通信和更多的数学运算。
编辑:
感谢一位用户,我得到了一个单行解决方案。 (下面将替换 for 循环中的行)
c=x/n
newLine[x] = line[((c+1)%2)*((x%n)*n+c) + (c%2)*((n-1)-2*(x%n))*n ];
【问题讨论】: