解题思路:
主对角线好确定

法1其余手写,略

法2循环赋值转置。

if(j==i) continue;

           arr2[3*i+j]=arr1[3*j+i];//i+1是行,j+1是列。互换即可实现转置

注意事项:
暂时不明
参考代码:

法1

#include

using namespace std;

int main()

{

   int arr1[9]={};

   int arr2[9]={};

   int num;

   for (int i =0;i<3;i++)

   {

       for (int j =0;j<3;j++)

       {

           cin>>num;

           arr1[3*i+j]=num;

           if(j==i) arr2[3*i+j]=num;//主对角线

       }

   }

   //手写自转置

   arr2[1]=arr1[1*3+0];

   arr2[2]=arr1[2*3+0];

   arr2[3]=arr1[1];

   arr2[5]=arr1[2*3+1];

   arr2[6]=arr1[2];

   arr2[7]=arr1[1*3+2];

   for (int i =0;i<3;i++)

   {

       for (int j =0;j<3;j++)

       {

           cout<<arr2[3*i+j]<<' ';

       }

       cout<<endl;

   }

   

   return 0;

}


法2

#include<iostream>

using namespace std;

int main()

{

   int arr1[9]={};

   int arr2[9]={};

   int num;

   for (int i =0;i<3;i++)

   {

       for (int j =0;j<3;j++)

       {

           cin>>num;

           arr1[3*i+j]=num;

           if(j==i) arr2[3*i+j]=num;//主对角线

       }

   }

   //循环转置赋值arr2

 for (int i =0;i<3;i++)

   {

       for (int j =0;j<3;j++)

       {

           if(j==i) continue;

           arr2[3*i+j]=arr1[3*j+i];

        }

   }

   for (int i =0;i<3;i++)

   {

       for (int j =0;j<3;j++)

       {

           cout<<arr2[3*i+j]<<' ';

       }

       cout<<endl;

   }

   

   return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »