我以为这个问题有一个简单的解决方案,几个for循环和一些奇特的计数器,但显然它要复杂得多。
所以我的问题是,您将如何在C中编写对角带状方阵的函数遍历。
例:
1 2 3 4 5 6 7 8 9
必须按照以下顺序遍历:
[1],[2,4],[3,5,7],[6,8],[9]
上面的每个带都用方括号括起来。要求之一是能够区分条带。这意味着您知道何时开始新的剥离。这是因为还有一个函数,我必须为试条中的每个项目然后在新试条的开始之前调用该函数。因此,没有代码重复的解决方案是理想的。
这是您可以使用的东西。只需将printfs替换为您实际想要执行的操作即可。
#include <stdio.h> int main() { int x[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int n = 3; for (int slice = 0; slice < 2 * n - 1; ++slice) { printf("Slice %d: ", slice); int z = (slice < n) ? 0 : slice - n + 1; for (int j = z; j <= slice - z; ++j) { printf("%d ", x[j][slice - j]); } printf("\n"); } return 0; }
输出:
Slice 0: 1 Slice 1: 2 4 Slice 2: 3 5 7 Slice 3: 6 8 Slice 4: 9