关于矩阵的相关代码

题目:输入n,输出如下矩阵。

例子:

输入5

输出

3    3    3    3    3

3    2    2    2    3

3    2    1    2    3  

3    2    2    2    3

3    3    3    3    3

方案一:

利用螺旋矩阵的思想解决,但要创建数组不利于程序的快速执行,当n过大时会超空间。

 

#include<iostream>

using namespace std;

int main(){

         int n;

         while(cin>>n)

         {

                  int a[500][500],up=1,down=n,left=1,right=n,i=1,j=1,t=(n+1)/2;

                  while(t>=1)

                  {

                          while(j<=right)

                          {

                                   a[i][j]=t;

                                   j++;

                          }

                          j--;up++;

                          while(i<=down)

                          {

                                   a[i][j]=t;

                                   i++;

                          }

                          i--;right--;

                          while(j>=left)

                          {

                                   a[i][j]=t;

                                   j--;

                          }

                          j++;down--;

                          while(i>=up)

                          {

                                   a[i][j]=t;

                                   i--;

                          }

                          i++;left++;       

                          t--;j++;             

                  }

                  for(i=1;i<=n;i++)

                  {

                          for(j=1;j<=n;j++)

                          cout<<a[i][j]<<" ";

                          cout<<endl;

                  }               

         }

         return 0;

}

方案二:

不创建数组

 

#include<iostream>/*注意n的奇偶*/

using namespace std;

int main(){

         int n,i,j;

         while(cin>>n)

         {

                  for(i=1;i<=n;i++)

                  {

                          for(j=1;j<=n;j++)

                          {

                                   if(i==j)

                                   {

                                            if(i<=(n+1)/2)

                                            cout<<(n+1)/2+1-i<<" ";

                                            if(i>(n+1)/2)

                                            cout<<i-(n+1)/2+n%2<<" ";

                                   }

                                   if(i+j==n+1&&n%2==0)

                                   {

                                            if(i<=(n+1)/2)

                                            cout<<(n+1)/2+1-i<<" ";

                                            if(i>(n+1)/2)

                                            cout<<i-(n+1)/2+n%2<<" ";                                      

                                   }

                                   if(i+j==n+1&&n%2!=0)

                                   {

                                            if(i<(n+1)/2)

                                            cout<<(n+1)/2+1-i<<" ";

                                            if(i>(n+1)/2)

                                            cout<<i-(n+1)/2+n%2<<" ";                                      

                                   }

                                   if(i<j&&i+j<n+1)

                                   cout<<(n+1)/2+1-i<<" ";

                                   if(i>j&&i+j<n+1)

                                   cout<<(n+1)/2+1-j<<" ";

                                   if(i>j&&i+j>n+1)

                                   cout<<i-(n+1)/2+n%2<<" ";

                                   if(i<j&&i+j>n+1)

                                   cout<<j-(n+1)/2+n%2<<" ";

                          }

                          cout<<endl;

                  }

         }

         return 0;

}

猜你喜欢

转载自blog.csdn.net/qq_40935723/article/details/81073291