/**********************************************\
以“回”字的形式输出从1以后的数字,如下:
若输入3,则输出:
1 2 3
8 9 4
7 6 5
\**********************************************/
//#define DEBUG
#include<iostream.h>
#include<process.h>
void main()
{
int num;
int counter=1;
cout<<"Please input a number : ";
cin>>num;
if(num<=0)
{
cout<<"Input Error!"<<endl;
abort();
}
int i,j;
int **ppdata=new int*[num];
for(i=0;i<num;++i)
{
ppdata[i]=new int[num];
}
/////////////////////////
i=j=0;
int maxi(num),maxj(num),mini(-1),minj(-1);
lefttoright:
for(;j<maxj;++j)
{
ppdata[i][j]=counter++;
#ifdef DEBUG
cout<<i<<'\t'<<j<<'\t'<<counter-1<<endl;
#endif
}
--j;++i;
mini++;
if((maxi-mini<=1)&&(maxj-maxi<=1))
goto end;
//uptodown:
for(;i<maxi;++i)
{
ppdata[i][j]=counter++;
#ifdef DEBUG
cout<<i<<'\t'<<j<<'\t'<<counter-1<<endl;
#endif
}
--i;
--j;
maxj--;
if((maxi-mini<=1)&&(maxj-maxi<=1))
goto end;
//righttoleft:
for(;j>minj;--j)
{
ppdata[i][j]=counter++;
#ifdef DEBUG
cout<<i<<'\t'<<j<<'\t'<<counter-1<<endl;
#endif
}
++j;
--i;
maxi--;
if((maxi-mini<=1)&&(maxj-maxi<=1))
goto end;
//downtoup:
for(;i>mini;--i)
{
ppdata[i][j]=counter++;
#ifdef DEBUG
cout<<i<<'\t'<<j<<'\t'<<counter-1<<endl;
#endif
}
++i;
++j;
minj++;
if((maxi-mini<=1)&&(maxj-maxi<=1))
goto end;
goto lefttoright;
/////////////////////////
end:
cout<<"The answer is :"<<endl;
for(i=0;i<num;++i)
{
for(j=0;j<num;++j)
{
cout<<ppdata[i][j]<<'\t';
}
cout<<endl;
}
for(j=0;j<num;++j)
{
delete [](ppdata[j]);
}
delete ppdata;
}
评论