8、按副对角线顺序输出数组

8、题目:按副对角线顺序输出数组

若有数组:
1 2 3
4 5 6
7 8 9
则按副对角线顺序从右上到左下输出数组:
1 2 4
3 5 7
6 8 9

关键思路:对于副对角线而言,线上各个元素的行列下标和是相等的,如:第一条副对角线上各个元素各自的行列下标和为0,第二条为1,第m条为m-1…最后一条为(m-1)+(n-1)=n+m-2

#include<stdio.h>
int main(){
	//测试用例:int a[3][4]={1,2,4,7,3,5,8,10,6,9,11,12};
	int a[n][m];
	int i, j;
	for(){
		此处省略输入n行m列矩阵的代码
	}
	
	//最外层循环表示输出行列下标和为 i的副对角线上的各元素
	
	//先输出上副三角形的元素
	for(i=0;i<=m-1;i++){					//******组成上副三角形的每一条副对角线的第一个元素都在第一行,故起始行标都为0******
		for(j=0;j<=n-1;j++){				//i=0;j<=n-1;意为从第0行到第n-1行
			if(i-j>=0){						//i为行列下标和,已知行标j,则i-j为列标,而列标不能为负数,即i-j要大于等于0
				printf("%d ", a[j][i-j]);
			}else{
				break;
			}
		}
	}
	
	//接着输出副下三角形的元素
	for(i=m;i<=n+m-2;i++){			//******组成下副三角形的每一条对角线的第一个元素都在第m-1列,但它们的起始行标随副对角线的不同而不同******
		for(j=i-(m-1);j<=n-1;j++){	//i为行列下标和,已知列标m-1,则i-(m-1)为起始行标
			if(i-j>=0){				//此处分析同上副三角形
				printf("%d ", a[j][i-j]);
			}else{
				break;
			}
		}
	}
	return 0;
} 
发布了16 篇原创文章 · 获赞 0 · 访问量 325

猜你喜欢

转载自blog.csdn.net/NAU_LHT/article/details/104168358