c0604 旋转魔方阵

【问题描述】
输入一个自然数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;
}

发布了71 篇原创文章 · 获赞 36 · 访问量 9427

猜你喜欢

转载自blog.csdn.net/qq_34686440/article/details/105229114