Нам нужны два шага для обхода 2D массива.
- обходе левый нижний часть матрицы.
- Обход правый верхний часть матрицы.
Тогда мы должны заботиться о том, как пройти обратную диагональ.
- Чтобы найти взаимосвязь индекса между предыдущим элементом массива и последующим элементом массива.
- Обобщение функции между индексом элемента и значением.
- Использование для цикла для перемещения.
код в C здесь:
#include<stdio.h>
int main(void){
int row = 3;
int col = 4;
int arr[3][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int i,j;
for(i=row-1; i>=0; i--){
int tmpRow = i;
int tmpCol= 0;
while(tmpRow<row){
printf("%d ", arr[tmpRow][tmpCol]);
tmpCol++;
tmpRow++;
}
}
for(i=1; i<col; i++){
int tmpCol = i;
int tmpRow = 0;
while(tmpCol<col){
printf("%d ", arr[tmpRow][tmpCol]);
tmpCol++;
tmpRow++;
}
}
return 0;
}
Результат здесь: enter image description here
ONE LOOP:
int main(void){
int row = 3;
int col = 4;
int arr[3][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int i,j;
//number of reverse diagonal
int tripNum = row + col - 1;
int firstRowIndex = row - tripNum;
for(i=row-1; i>=firstRowIndex; i--){
int tmpRow = i;
int tmpCol= 0;
while(tmpRow<row && tmpCol<col){
if(tmpRow<0){
tmpCol++;
tmpRow++;
continue;
}else{
printf("%d ", arr[tmpRow][tmpCol]);
tmpCol++;
tmpRow++;
}
}
}
return 0;
}
Try и потерпеть неудачу. В этом нет вреда. Голосование закрывается. – nullpointer
Пробовал, но не мог понять. – b0sss
это не так уж сложно выяснить, у него есть простое решение. –