【OJ_1003】蛇形矩阵

题目详情

在这里插入图片描述
截图源自:AHNU—new OJ

解题

我自己的主要思路是

以斜对角线作为划分,分成五个部分,
# 1
# 2 3
# 4 5 6
# 7 8 9 10
# 11 12 13 14 15
可以的得知每个部分是递增的,只需得到第一纵列,即每个部分的基数,即可填充完整二维数组。

基数部分规律
1=0 +1
2=0+1 +1
4=0+1+2 +1
7=0+1+2+3 +1
11=0+1+2+3+4 +1
可知每个部分的基数都是其对应行数从零加到n-1再加一
即 (0+1+……+n-2+n-1)+1

C代码实现

#include <stdio.h>
int jie(int p);

int main(){
	int i,n,j,p[100][100];
	scanf("%d",&n);

	//为数组赋值
	for(i=0;i<n;i++){
		int start=jie(i+1);
		int a=i,b=0; 
		for(j=0;j<=i;j++){
			p[a][b]=start;
			a--;b++;start++;
		}
	}
	for(i=0;i<n;i++){
		for(j=0;j<n-i;j++){
			printf("%d",p[i][j]);
			if(j!=n-i-1)
				printf(" ");
		}
		printf("\n");
	}
	return 0;
} 

//求基数
int jie(int p){
	int i,res=0;
	for(i=0;i<p;i++){
		res+=i;
	}
	return res+1;
}

猜你喜欢

转载自blog.csdn.net/weixin_45794390/article/details/106872205