关于右上走势的奇数魔方振,不懂错在哪,麻烦帮忙看看!!!!
右上走势就是:(先将所有位置都填为0)从第0行最中间开始,即a[0][N/2]=1,接着就是右上方的为2,如果实际的右上方不存在,就将上下或左右对接,找到虚拟的右上方,即a[-1][2]不存在,则虚拟右上方为a[2][2]=2;如果右上方为非0数,就填在原来位置的下方#include<iostream>
using namespace std;
const int N=3;
void main()
{
int a[N][N]={0};
int i,j,t=2;
a[0][N/2]=1;
for(i=0,j=N/2;t<=N*N;)
{
i-=1;
j+=1;
if(i<0)
i+=N;
if(j>=N)
j-=N;
if(a[i][j]==0)
a[i][j]=t++;
else if(i==N-1&&j==0)
{
i=i-N+2;
j=j+N-1;
a[i][j]=t++;
}
else
{
i-=1;
j+=2;
a[i][j]=t++;
}
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
cout<<a[i][j]<<" ";
if(j==N-1)
cout<<endl;
}
}
理想运行后的结果应该是
8 1 6
3 5 7
4 9 2
但是运行后的结果竟然是
4 1 6
8 5 0
7 9 2
不懂错在哪
求解啊
[ 本帖最后由 鈴蘭 于 2013-5-2 18:35 编辑 ]