注意:实际上,问题是以之字形方式打印矩阵的对角线 给定2D矩阵,以对角线顺序打印给定矩阵的所有元素。例如,考虑以下5 X 4输入矩阵。
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
上述矩阵的对角线打印是
1
5 2
9 6 3
13 10 7 4
17 14 11 8
18 15 12
19 16
20
现在我只是打印数组的下标
#include<stdio.h>
#include<stdlib.h>
int main(){
int rows,cols,ind,inner,outer;
scanf("%d %d",&rows,&cols);
int **ptr=(int**)malloc(rows*sizeof(int*));
for(ind=0;ind<rows;ind++)
*(ptr+ind)=(int*)malloc(cols*sizeof(int));
for(outer=0;outer<cols;outer++){
for(inner=0;inner<rows;inner++){
scanf("%d ",(*(ptr+outer)+inner));
}
}
inner=0,outer=0;
for(ind=1;ind<rows+cols;ind++){
printf("%d",ind);
while(*(*(ptr+outer)+inner)!=0) {
printf("%d %d",outer,inner);
inner++;
outer--;
}printf("\n");
}
return 0;
}
也适用于没有malloc的数组
#include<stdio.h>
#include<stdlib.h>
int main(){
int rows,cols,ind,inner,outer;
scanf("%d %d",&rows,&cols);
int arr[rows][cols];
for(outer=0;outer<rows;outer++){
for(inner=0;inner<cols;inner++){
scanf("%d ",&arr[outer][inner]);
}
}
inner=0,outer=0;
for(ind=0;ind<rows;ind++){
printf("%d",ind);
while(arr[outer][inner]){
//printf("%d %d",outer,inner);
inner++;
outer--;
}
printf("\n");
outer=ind;
inner=0;
}
return 0;
}
答案 0 :(得分:0)
首先,不需要强制转换malloc()
,请阅读此Do I cast the result of malloc?。
int **ptr=malloc(rows*sizeof(*ptr));
for(ind=0;ind<rows;ind++)
*(ptr+ind)=malloc(cols*sizeof(**ptr));
当您为for
而不是{{1}分配内存时,外部rows
循环应旋转for
次,内部cols
循环应旋转ptr[rows][cols]
次}}。
将其更改为
ptr[cols][rows]