题意:
按照以下格式输出矩阵上三角形:
方法一:
直接模拟
思路:斜着遍历。
因为根据行下标和列下标之和,可以划分为不同斜线,
最后遍历每条斜线,即可得到结果。
#include <bits/stdc++.h> using namespace std; int a[105][105]; int main(){ int n; while(cin >> n){ int num=1; for(int i=0;i<n;i++){//下标总和 for(int j=0;j<=i;j++){//列下标 a[i-j][j]=num++;//行下标=下标总和-列下标 } } for(int i=0;i<n;i++){//遍历输出 for(int j=0;j<n-i;j++){ cout << a[i][j] << " "; } cout << endl; } } return 0; }
时间复杂度:空间复杂度:
方法二:
找规律
思路:
规律:蛇形矩阵的每个数等于上一行右一列的数-1。
因此,先初始化第一行,第一行相邻数的间隔值分别为+2,+3,+4,+5......接着,遍历其他行,根据每个数等于上一行右一列的数-1,即可求解成功。
#include <bits/stdc++.h> using namespace std; int a[105][105]; int main(){ int n; while(cin >> n){ int x=2;//第一行的相邻数的间隔 a[0][0]=1; for(int i=1;i<n;i++){//初始化第一行 a[0][i]=a[0][i-1]+(x++); } for(int i=1;i<n;i++){//遍历其他行数 for(int j=0;j<n-i;j++){ a[i][j]=a[i-1][j+1]-1;//a[i][j]=上一行右一列的数-1 } } for(int i=0;i<n;i++){//遍历输出 for(int j=0;j<n-i;j++){ cout << a[i][j] << " "; } cout << endl; } } return 0; }
时间复杂度:空间复杂度: