Files
BasicsOfComputerSoftwareEng…/12/Optional01.c
2022-12-14 00:55:48 +08:00

79 lines
1.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define UPRIGHT true
#define LEFTDOWN false
bool direction = UPRIGHT;
bool moveNext(int* i, int* j, int n) {
if (*i == n-1 && *j == n-1) {
return true;
}
if (direction == UPRIGHT) {
if (*i == 0) {
direction = LEFTDOWN;
if (*j == n-1) {
(*i)++;
}
else {
(*j)++;
}
}
else if (*j == n-1) {
direction = LEFTDOWN;
(*i)++;
}
else {
(*i)--;
(*j)++;
}
return false;
}
else {
if (*j == 0) {
direction = UPRIGHT;
if (*i == n-1) {
(*j)++;
}
else {
(*i)++;
}
}
else if (*i == n-1) {
direction = UPRIGHT;
(*j)++;
}
else {
(*i)++;
(*j)--;
}
return false;
}
}
int main() {
int *matrixPtr = NULL;
int n = 0;
int i = 0, j = 0;
scanf("%d", &n);
matrixPtr = malloc(n*n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", matrixPtr + i*n + j);
}
}
i = 0;
j = 0;
while (true) {
printf("%d ", *(matrixPtr + i*n + j));
if (moveNext(&i, &j, n)) {
break;
}
}
printf("\n");
return 0;
}