侯永强北极光:旋转魔方阵

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/27 16:38:24
【问题描述】
输入一个自然数N(2≤N≤9),要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在左上角,呈顺时针方向依次放置各元素。
N=3时:
1 2 3
8 9 4
7 6 5
【输入形式】
从标准输入读取一个整数N。
【输出形式】
向标准输出打印结果。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。
【输入样例】
4
【输出样例】
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

请大师用标准C帮俺写下这个程序,还有算法!谢谢!

标准C
这位大哥,你写的是什么啊?
不是你写的那种!

main()
{
int n=5,m=0,i,j,k=0,a[10][10],b[4][2];
b[0][0]=1;b[0][1]=0;b[1][0]=0;b[1][1]=1;
b[2][0]=-1;b[2][1]=0;b[3][0]=0;b[3][1]=-1;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=0;
for(i=0;i<10;i++)
{
a[i][0]=1;
a[0][i]=1;
a[i][n+1]=1;
a[n+1][i]=1;
}
i=1;j=0;
while(m!=n*n)
{
if(!a[i+b[k][1]][j+b[k][0]])
{
i=i+b[k][1];
j=j+b[k][0];
a[i][j]=++m;
}
else k=(k+1)%4;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%3d",a[i][j]);
printf("\n");
}

}

只能做奇数方阵,偶数的做不了!偶数方阵太复杂!!
//四阶方阵
main()
{printf("1 15 14 4\n8 10 11 5\n12 6 7 9\n13 3 2 16\n");
}
或者:
8 11 14 1

13 2 7 12

3 16 9 6

10 5 4 15