나는 것을보고 만 표시 C 코드는 나를 위해 너무 고급이
당신은 당신이 인덱스 for
루프의 또 다른 중첩 된 세트로 일을하고 수정하는 일을 계속 할 수 :
을
#include <stdio.h>
void zigZagArray(int *array, int n) {
int r = 1;
for (int z = 0; z < n; z++) {
if (z % 2 == 0) {
for (int i = 0; i <= z; i++) {
// array[z - i][i] = r++;
*((array + (z - i) * n) + i) = r++;
}
} else {
for (int i = 0; i <= z; i++) {
// array[i][z - i] = r++;
*((array + i * n) + z - i) = r++;
}
}
}
for (int z = 1; z < n; z++) {
if (z % 2 == n % 2) {
for (int i = 1; i <= n - z; i++) {
// array[z + i - 1][n - i] = r++;
*((array + (z + i - 1) * n) + n - i) = r++;
}
} else {
for (int i = 1; i <= n - z; i++) {
// array[n - i][z + i - 1] = r++;
*((array + (n - i) * n) + z + i - 1) = r++;
}
}
}
}
void printArray(int *array, int n)
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%2d ", *((array + i * n) + j));
}
printf("\n");
}
}
int main() {
int a[7][7];
zigZagArray((int *) a, 7);
printArray((int *) a, 7);
printf("\n");
int b[8][8];
zigZagArray((int *) b, 8);
printArray((int *) b, 8);
printf("\n");
int c[9][9];
zigZagArray((int *) c, 9);
printArray((int *) c, 9);
return 0;
}
OUTPUT
% ./a.out
1 2 6 7 15 16 28
3 5 8 14 17 27 29
4 9 13 18 26 30 39
10 12 19 25 31 38 40
11 20 24 32 37 41 46
21 23 33 36 42 45 47
22 34 35 43 44 48 49
1 2 6 7 15 16 28 29
3 5 8 14 17 27 30 43
4 9 13 18 26 31 42 44
10 12 19 25 32 41 45 54
11 20 24 33 40 46 53 55
21 23 34 39 47 52 56 61
22 35 38 48 51 57 60 62
36 37 49 50 58 59 63 64
1 2 6 7 15 16 28 29 45
3 5 8 14 17 27 30 44 46
4 9 13 18 26 31 43 47 60
10 12 19 25 32 42 48 59 61
11 20 24 33 41 49 58 62 71
21 23 34 40 50 57 63 70 72
22 35 39 51 56 64 69 73 78
36 38 52 55 65 68 74 77 79
37 53 54 66 67 75 76 80 81
%
에서 [ "로제타 코드를 살펴 보자 - 지그재그 m atrix "] (https://rosettacode.org/wiki/Zig-zag_matrix). –
그런 식으로 반복을 캡슐화하는 2 개의 루프를 추가로 만들 수 있고 루프를 오프셋하는 다른 루프를 만들 수 있습니다. 두 루프는 조건문에 중첩되어야하고 부모 루프의 개수는 순서대로 조건문을 선택합니다 적절한 길을 가로 지르는 것. 내 머리 꼭대기에서 내가 제안한 해결책은 알고리즘을 복잡하게 만듭니다. 월요일 아침 이후로자는 게 아니라 지난밤 홀리데이 인 익스프레스에 머물렀다는 것을 명심하십시오. – oOpSgEo
@ J. Piquard 나는 그것을 보았지만 거기에 표시된 C 코드는 나에게 너무 앞선다. – Piotr