说明:

特殊矩阵的逆向转换是指给你一个一维数组,让你转换成特殊矩阵的形式,并输出。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一、对称矩阵

数据结构之特殊矩阵的逆向转换

代码

#include<iostream>
using namespace std;
#define N 20
int a[N*(N+1)/2];
int matrix[N][N];
int n;
void Transform(){
    int i=0,j=0,k=0;
    for(;k<n*(n+1)/2;k++){
        matrix[i][j]=a[k];
        if(i==j) {i++;j=0;}
        else{
        	matrix[j][i]=a[k];
			j++;
		} 
    }
}
int main(){
    cout<<"请输入对称矩阵的边长: ";
    cin>>n;
    cout<<endl<<"请输入"<<n*(n+1)/2<<"个数:"<<endl;
    for(int i=0;i<n*(n+1)/2;i++) cin>>a[i];
    cout<<endl<<"对称矩阵为:"<<endl;
    Transform();
    bool flag=1; 
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(flag){
               cout<<matrix[i][j];
               flag=0;
            }
            else cout<<' '<<matrix[i][j];
        }
        flag=1;
        cout<<endl;
    }
    return 0;
}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、三角矩阵

数据结构之特殊矩阵的逆向转换

三角矩阵分上下两种三角矩阵,上三角矩阵如上图所示,下三角矩阵反之。
代码

#include<iostream>
using namespace std;
#define N 20
int a[N*(N+1)/2];
int matrix[N][N];
int n,c;
void Upper(){
    int i=0,j=0,k=0;
    for(;k<n*(n+1)/2;k++){
        matrix[i][j]=a[k];
        if(i==j) {i++;j=0;}
        else{
        	matrix[j][i]=c;
			j++;
		} 
    }
}
void Lower(){
	int i=0,j=0,k=0;
    for(;k<n*(n+1)/2;k++){
        matrix[i][j]=a[k];
        if(j==n-1) {i++;j=i;}
        else j++;
        if(i!=j) matrix[j][i]=c;
    }
} 
int main(){
    cout<<"请输入三角矩阵的边长: ";
    cin>>n;
    cout<<endl<<"请输入"<<n*(n+1)/2<<"个数:"<<endl;
    for(int i=0;i<n*(n+1)/2;i++) cin>>a[i];
    cout<<"请输入常数c:";
    cin>>c;
    a[n*(n+1)/2]=c;
    bool flag=1; 
    cout<<endl<<"上三角矩阵为:"<<endl;
    Upper();
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(flag){
               cout<<matrix[i][j];
               flag=0;
            }
            else cout<<' '<<matrix[i][j];
        }
        flag=1;
        cout<<endl;
    }
    cout<<"下三角矩阵为:"<<endl;
    Lower();
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(flag){
               cout<<matrix[i][j];
               flag=0;
            }
            else cout<<' '<<matrix[i][j];
        }
        flag=1;
        cout<<endl;
    }
    return 0;
}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

三、三对角矩阵

三角矩阵相对复杂,情况多样,这里列举三对角矩阵,如下图所示:

数据结构之特殊矩阵的逆向转换

代码

#include<iostream>
using namespace std;
#define N 20
int a[N*(N+1)/2];
int matrix[N][N];
int n;
void Transform(){
    int i=0,j=0,k=0;
    for(;k<n*3-2;k++){
        matrix[i][j]=a[k];
        if(i==0&&j==1) {i++;j=0;}
        else j++;
        if(j==i+2) {i++;j=i-1;}
    }
}
int main(){
    cout<<"请输入三对角矩阵的边长: ";
    cin>>n;
    cout<<endl<<"请输入"<<n*3-2<<"个数:"<<endl;
    for(int i=0;i<n*3-2;i++) cin>>a[i];
    cout<<endl<<"三对角矩阵为:"<<endl;
    Transform();
    bool flag=1; 
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(flag){
               cout<<matrix[i][j];
               flag=0;
            }
            else cout<<' '<<matrix[i][j];
        }
        flag=1;
        cout<<endl;
    }
    return 0;
}

 

相关文章:

  • 2022-12-23
  • 2021-09-16
  • 2021-08-17
  • 2022-01-11
  • 2021-04-12
  • 2021-10-07
  • 2021-12-06
猜你喜欢
  • 2021-12-19
  • 2021-12-28
  • 2021-12-27
  • 2021-08-28
  • 2021-06-09
  • 2022-12-23
  • 2021-09-06
相关资源
相似解决方案