2009年6月17日 星期三

知識+ 魔方陣之顯示方向

//===============================================================
// 20090617 知識 +
// http://tw.knowledge.yahoo.com/question/question?qid=1509061704372
// 發問者 : 匿名
//===============================================================


#include <iostream>
#include <iomanip>
using namespace std;

const int N=7;

#define DISPLAY(A,B,C,D) cout<<endl<<(A)<<endl;for(B){for(C)cout<<setw(4)<<(D);cout<<endl;}

int main(void)
{
int i, j, n;
int s[N+1][N+1] = {0};
for(i=0, j=(N+1)/2, n=1; n<=N*N; s[i][j]=n++)
{
if ((n%N)==1) i++;
else
{
if (--i==0) i=N;
if (++j>N) j=1;
}
}
for(i=1;i<=N;i++) { s[0][i]=s[1][i]; s[i][0]=s[i][1]; }

DISPLAY("*上右上:", i=1;i<=N;i++, j=1;j<=N;j++, s[i][j] )
DISPLAY("*上右下:", i=0;i!=1;i=(i)?i-1:N, j=1;j<=N;j++, s[i][j] )
DISPLAY("*上左上:", i=1;i<=N;i++, j=N;j>=1;j--, s[i][j] )
DISPLAY("*上左下:", i=0;i!=1;i=(i)?i-1:N, j=N;j>=1;j--, s[i][j] )

DISPLAY("*下右上:", i=2;i!=1;i=(i==N)?0:i+1, j=1;j<=N;j++, s[i][j] )
DISPLAY("*下右下:", i=N;i>=1;i--, j=1;j<=N;j++, s[i][j] )
DISPLAY("*下左上:", i=2;i!=1;i=(i==N)?0:i+1, j=N;j>=1;j--, s[i][j] )
DISPLAY("*下左下:", i=N;i>=1;i--, j=N;j>=1;j--, s[i][j] )

DISPLAY("*左右上:", i=N;i>=1;i--, j=0;j!=1;j=(j)?j-1:N, s[j][i] )
DISPLAY("*左右下:", i=1;i<=N;i++, j=0;j!=1;j=(j)?j-1:N, s[j][i] )
DISPLAY("*左左上:", i=N;i>=1;i--, j=1;j<=N;j++, s[j][i] )
DISPLAY("*左左下:", i=1;i<=N;i++, j=1;j<=N;j++, s[j][i] )

DISPLAY("*右右上:", i=N;i>=1;i--, j=N;j>=1;j--, s[j][i] )
DISPLAY("*右右下:", i=1;i<=N;i++, j=N;j>=1;j--, s[j][i] )
DISPLAY("*右左上:", i=N;i>=1;i--, j=2;j!=1;j=(j==N)?0:j+1, s[j][i] )
DISPLAY("*右左下:", i=1;i<=N;i++, j=2;j!=1;j=(j==N)?0:j+1, s[j][i] )

return 0;
}
//================================



. "上右上"-- 數字1在[上]端, 隨後數字往[右上]方遞增; 其餘類推~~~

沒有留言:

張貼留言