首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于数组有关问题.

2012-02-04 
关于数组问题...-----------------/\|116151413||217242312||318252211||419202110||56789|\/-----------

关于数组问题...


    <-----------------   /\
|       1   16   15   14   13         |
|       2   17   24   23   12         |  
|       3   18   25   22   11         |
|       4   19   20   21   10         |
|       5     6     7     8     9         |
\/   ---------------->          
        问题是这样的,让你输入n   ,输出如上面排列的矩阵(n*n);
请问应该怎样实现?  


[解决办法]
#include <iostream>
using namespace std;


void f(int**a,int n)
{
enum direction{up,down,left,right};
direction d = down;
int x=0,y=0;
for(int i=1; i <=n*n; i++)
{
//cout < <i < <endl;
a[x][y]=i;
switch(d)
{
cout < <d < <endl;
case up:
if(x==0 || a[x-1][y]!=-1)
{
d=left;
--y;
}
else
--x;
break;
case down:
if(x==n-1 || a[x+1][y]!=-1)
{
d=right;
++y;
}
else
++x;
break;
case left:
if(y==0 || a[x][y-1]!=-1)
{
d = down;
++x;
}
else
--y;
break;
case right:
if(y==n-1 || a[x][y+1]!=-1)
{
d=up;
--x;
}
else
++y;
break;
default:
break;
}
}
}

#define N 5
int main()
{
int **a = new int*[N];
for(int i=0; i <N; ++i)
{
a[i] = new int[N];
for(int j=0; j <N; ++j)
a[i][j]=-1;
}
f(a,N);
for(int i=0; i <N; ++i)
for(int j=0; j <N; ++j)
{
cout < <a[i][j] < < "\t ";
if(j==N-1)cout < <endl;
}
system( "pause ");
return 0;
}

热点排行