1599: 做幻方
时间限制: 1 Sec 内存限制: 128 MB
题目描述
Apple最近迷上了做幻方,Apple还是个中高手,只要你说个奇数N就能把N*N的幻方做出来。其实你可以比他做得更好的。Apple总是画得很乱,而你可以利用程序排得很整齐_ 幻方的要求:每一行,每一列,还有两条斜线上数字的和都相等.
输入
每行一个奇数N(0< N < 30),输入0结束
输出
输入一个奇数,输出一个幻方,顺序参照样板输出;同一列的数右对齐,数与数用一个空格分开;输出完以后加一个回车。
样例输入
5
1
0
样例输出
11 18 25 2 9
10 12 19 21 3
4 6 13 20 22
23 5 7 14 16
17 24 1 8 15
1
分析及AC代码
这个题主要是格式问题
#include<stdio.h>
#include<string.h>
int a[35][35];
int b[100];
int main()
{
int n=1;
while(1)
{
scanf("%d",&b[n]);
n++;
if(b[n-1]==0)
{
n=n-2;
break;
}
}
for(int k=1;k<=n;k++)
{
memset(a,0,sizeof(a));
int x=b[k],y=(b[k]+1)/2;
for(int i=1;i<=b[k]*b[k];i++)
{
if(x>b[k]) x=1;
if(y>b[k]) y=1;
a[x][y]=i;
if(i%b[k]==0)
{
x--;
}
else
{
x++;
y++;
}
}
for(int i=1;i<=b[k];i++)
{
for(int j=1;j<=b[k];j++)
{
//下面注意输出格式
if(b[k]>9) printf("%3d",a[i][j]);
else if(b[k]>3) printf("%2d",a[i][j]);
else printf("%d",a[i][j]);
if(j!=b[k]) printf(" ");
}
//注意格式
printf("\n");
}
//注意格式,由于这里的格式原因不能输入一个数输出一个对应的幻方,而要一次性输入
if(k!=n)
printf("\n");
}
return 0;
}