一道面试题

来源:互联网 发布:信捷plc编程教学视频 编辑:程序博客网 时间:2024/06/06 18:09

同学去面试,一道面试题没做出来回来给我们讲了下,早上起床做一下。

#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;}


 

原创粉丝点击