思路:将主对角线的1,2,3,4看成一行,5,6,7看成一行,8,9看成一行,10看成一行。按照这种方法,遍历一遍,正好是1~10。
然后在遍历的过程中将这些数存放在数组中。
上图所示:1的坐标为(1,1),因为i=1,j=1时为1。因此:
对于第一行的数(i=1):
1的坐标为(1,1),对应放在数组的a[1][1]
2的坐标为(1,2),对应放在数组的a[2][2]
3的坐标为(1,3),对应放在数组的a[3][3]
4的坐标为(1,4),对应放在数组的a[4][4]
对于第二行的数(i=2):
5的坐标为(2,1),对应放在数组的a[2][1]
6的坐标为(2,2),对应放在数组的a[3][2]
7的坐标为(2,3),对应放在数组的a[4][3]
对于第三行的数(i=3):
8的坐标为(3,1),对应放在数组的a[3][1]
9的坐标为(3,2),对应放在数组的a[4][2]
对于第四行的数(i=4):
10的坐标为(4,1),对应放在数组的a[4][1]
得出规律:坐标为(i,j),对应放在数组的a[i+j-1][j]
代码:
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a[100][100];
int k=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n+1-i;j++){
a[i+j-1][j]=k;
k++;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}