同学去面试,一道面试题没做出来回来给我们讲了下,早上起床做一下。
#include <iostream>
#include <assert.h>
using namespace std;
int main()
{
int n,m,i,j;
int count=1;
int **p=NULL;
bool **q=NULL;
cout<<"输入一个数n:"<<endl;
cin>>n;
m=n;
p=(int **)new int[n];
q=(bool **)new bool[n];
assert(p!=NULL&&q!=NULL);
for (i=0;i<n;i++)
{
p[i]=new int[n];
}
for (i=0;i<n;i++)
{
q[i]=new bool[n];
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
q[i][j]=false;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
p[i][j]=0;
i=0;
j=0;
while (m>0)
{
for (;i<n;i++) //插入列,行下标随之改变
{
if (i<n&&q[i][j]!=true)
{
p[i][j]=count++;
q[i][j]=true;
}
else{
break;
}
}
i--;
j++;
for (;j<n;j++) //插入行,列下标随之改变
{
if (j<n&&q[i][j]!=true)
{
p[i][j]=count++;
q[i][j]=true;
}
else
{
break;
}
}
j--;
i--;
for (;i>=0;i--) //倒序插入列,行下标随之改变
{
if (i>=0&&q[i][j]!=true)
{
p[i][j]=count++;
q[i][j]=true;
}
else
{
break;
}
}
i++;
j--;
for (;j>0;j--) //倒序插入行,列下标随之改变
{
if (j>0&&q[i][j]!=true)
{
p[i][j]=count++;
q[i][j]=true;
}
else{
break;
}
}
j++;
i++;
m--;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<p[i][j]<<" ";
}
cout<<endl;
}
// for()
for(i=0;i<n;i++)
{
delete[] p[i];
delete[] q[i];
}
p=NULL;
q=NULL;
// delete[] p;
// delete[] q;
system("pause");
return 0;
}