【问题描述】
输入一个自然数N(2≤N≤9),要求输出如下的魔方阵,即边长为NN,元素取值为1至NN,1在左上角,呈顺时针方向依次放置各元素。
N=3时:
1 2 3
8 9 4
7 6 5
【输入形式】
从标准输入读取一个整数N。
【输出形式】
将结果输出到文件文件file.out。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。
【输入样例】
4
【输出样例】
输出文件file.out内容为:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
【评分标准】
本题不准使用数学库函数。结果正确得20分,每个测试点4分,提交程序文件名为magic.c。
条件是:不能越界,不能被填过数字
- 代码实现
//2020/3/31
#include<stdio.h>
#include<string.h>
void save(int a[][10],int n)
{
FILE *fp;
fp = fopen("c0604.out","w");
int i,j;
for(i = 0;i<n;i++)
{
for(j = 0;j<n;j++)
{
fprintf(fp,"%5d",a[i][j]);
}
fprintf(fp,"\n");
}
fclose(fp);
}
int main()
{
int a[10][10];
int n;
int var = 1;
int x = 0,y = 0;
scanf("%d",&n);
var = 1;
memset(a,0,sizeof(a));
a[x][y] = 1;
while(var<n*n)
{
while(y+1<=n-1 && !a[x][y+1]) a[x][++y] = ++var;
while(x+1<=n-1 && !a[x+1][y]) a[++x][y] = ++var;
while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++var;
while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++var;
}
save(a,n);
return 0;
}