说明:
特殊矩阵的逆向转换是指给你一个一维数组,让你转换成特殊矩阵的形式,并输出。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、对称矩阵
代码
#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;
}