题目详情
截图源自: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;
}