腾讯机试模拟题(蛇形矩阵)
蛇形矩阵示例:
整数3对应的蛇形矩阵为:
1 2 3
8 9 4
7 6 5
整数4对应的蛇形矩阵为:
1—2 – 3–4
12 13 14 5
11 16 15 6
10 –9– 8 -7
全部代码:
// Source: 腾讯公司模拟编程题
// Author: Yang Qiang
// Date : 2016/9/2
// 题目: 按行输出蛇形矩阵
// 示例: [1 2 3
// 4 5 6
// 7 8 9]
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
//检测不合理输入
if(n<=0) return 0;
int **max=new int*[n]; //建立二维数组
bool **maxflag=new bool*[n]; //建立标志矩阵
for(int i=0; i<n; i++)
{
max[i]=new int[n];
maxflag[i]=new bool[n];
}
//标志矩阵初始化
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
maxflag[i][j]=0;
//蛇形存入数字
int num=1,row=0,col=0;
while(num<=n*n)
{
while(row>=0 && col>=0 && col<n && row<n && maxflag[row][col]==0 )
{
max[row][col]=num++; //向右
cout<<max[row][col];
maxflag[row][col]=1; //更改标志位
col++;
}
col--;row++;
while(row>=0 && col>=0 && col<n && row<n && maxflag[row][col]==0 )
{
max[row][col]=num++; //向下
cout<<max[row][col];
maxflag[row][col]=1; //更改标志位
row++;
}
row--;col--;
while(row>=0 && col>=0 && col<n && row<n && maxflag[row][col]==0 )
{
max[row][col]=num++; //向左
cout<<max[row][col];
maxflag[row][col]=1; //更改标志位
col--;
}
col++;row--;
while(row>=0 && col>=0 && col<n && row<n && maxflag[row][col]==0 )
{
max[row][col]=num++; //向上
cout<<max[row][col];
maxflag[row][col]=1; //更改标志位
row--;
}
row++;col++;
}
cout<<endl;
//按行输出蛇形矩阵
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
cout<<max[i][j];
cout<<endl;
}
}
说明
1.需要改进的地方:可以只用一个矩阵,初始化为0即可。无需设置标志矩阵