C++入门必做题 答案 06

来源:互联网 发布:深圳市大数据产业协会 编辑:程序博客网 时间:2024/06/05 05:24

小提示:部分题目的图形有偏移现象;解决办法为,将题目拷贝到记事本,字体设置为‘Fixedsys’。

(编译环境:windowsXP_sp3 + Visual_C++_2008,保证编译成功,正常运行。)

 

  6. 矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数:

   ① 倒填,例如N=5             ② 蛇形填数              ③ 回转填数

 ┌─┬─┬─┬─┬─┐   ┌─┬─┬─┬─┬─┐   ┌─┬─┬─┬─┬─┐
 │25│24│23│22│21│   │ 1│ 3│ 4│10│11│   │ 1│16│15│14│13│
 ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤
 │20│19│18│17│16│   │ 2│ 5│ 9│12│19│   │ 2│17│24│23│12│
 ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤
 │15│14│13│12│11│   │ 6│ 8│13│18│20│   │ 3│18│25│22│11│
 ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤
 │10│ 9│ 8│ 7│ 6│   │ 7│14│17│21│24│   │ 4│19│20│21│10│
 ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤
 │ 5│ 4│ 3│ 2│ 1│   │15│16│22│23│25│   │ 5│ 6│ 7│ 8│ 9│
 └─┴─┴─┴─┴─┘   └─┴─┴─┴─┴─┘   └─┴─┴─┴─┴─┘

 


代码如下:

#include<iostream>
using namespace::std;

void Reverse();
void Snake();
void Circum();
void Output();
int N, n;
int** a;


void main()
{
 while(1)
 {

  cout<<"请输入方形二维数组的N值"<<endl;
  cin>>N;
  cin.clear();
  cin.sync();

  if(N>0)
  {
   break;
  }
  else
  {
   cout<<"输入无效,请重新输入"<<endl;
  }
 }


 a = new int* [N];
 for(int i=0;i<N;i++)
  a[i]= new int [N];

 cout<<"请输入您想要的填数方式:(输入序号)"<<endl;
 cout<<"1.倒填"<<endl;
 cout<<"2.蛇形填数"<<endl;
 cout<<"3.回转填数"<<endl;

 while(1)
 {
  cin>>n;
  cin.clear();
  cin.sync();

  if(n==1||n==2||n==3)
  {
   break;
  }
  else
  {
   cout<<"输入无效,请重新输入"<<endl;
  }

 }

 switch (n)
 {
 case 1:
  Reverse();Output();break;
 case 2:
  Snake();Output();break;
 case 3:
  Circum();Output();break;
 default:
  {
  }
 }
 system("pause");
}


void Reverse()
{
 int k=1;
 for(int i=N-1;i>=0;i--)
  for(int j=N-1;j>=0;j--)
   a[i][j]=k++;

}


void Snake()
{
 int i=1, j=0, k=2;

 a[0][0]=1;
 a[N-1][N-1]=N*N;

 

 while(!(i==(N-1)&&j==(N-1)))
 {
  if(j==0||i==(N-1)&&j!=(N-1))
  {

   for(;i>=0&&j<=N-1;i--,j++)
    a[i][j] = k++;

   if(i<0&&j<=N-1)
    i++;
   else
   {
    i=i+2;j--;
   }
  }


  if(i==0||j==(N-1)&&i!=(N-1))
  {

   for(;i<=N-1&&j>=0;j--,i++)
    a[i][j] = k++;

   if(j<0&&i<=N-1)
    j++;
   else
   {
    j=j+2;i--;
   }

  }

 }
}

 


void Circum()
{
 int i=0,j=0,k=1;
 int M = N;

 while(M)
 {
  for(i=i;i<M;i++)
  {
   a[i][j]=k++;
  }
  j++;i--;

  for(j=j;j<M;j++)
  {
   a[i][j]=k++;
  }
  i--;j--;

  for(i=i;i>=N-M;i--)
  {
   a[i][j]=k++;
  }
  j--;i++;

  for(j=j;j>i;j--)
  {
   a[i][j]=k++;
  }
  i++;j++;

  M--;
 }


}


void Output()
{

 cout<<"矩阵填好后,结果如下:"<<endl;
 for(int i=0;i<N;i++)
 {
  for(int j=0;j<N;j++)
   cout<<a[i][j]<<"/t";
  cout<<endl<<endl;
 }
}

原创粉丝点击