有趣的数字图形

题目描述

旋转数字,例如n=3,则打印

1 2 3

8 9 4

7 6 5

【输入形式】

输入数据有多组,每组有一个正整数N(N>0 && n<10)

【输出形式】

对于每组输入数据,输出对应的字符图形(每个数用3位字符宽度输出)。每两个图形之间有一个空行。

【样例输入】

1
2
3
4

【样例输出】

  1
 
  1  2
  4  3
 
  1  2  3
  8  9  4
  7  6  5
 
  1  2  3  4
 12 13 14  5
 11 16 15  6
 10  9  8  7
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int maze[20][20];
int n;
void Init() {
    int i, j;
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            maze[i][j] = 0;
}
void pri() {
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++)
            printf("%3d", maze[i][j]);
        printf("\n");
    }

}
int main()
{
    while (cin >> n) {
        Init();
        int z = 1;
        int i = 0;
        int x = 0;
        int y = 0;
        for (; z <= n * n;) {
            for (; maze[x][y] == 0 && y < n;) {
                maze[x][y++] = z++;
            }
            y--;
            x++;

            for (; maze[x][y] == 0 && x < n;) {
                maze[x++][y] = z++;
            }
            x--;
            y--;

            for (; maze[x][y] == 0 && y > -1;) {
                maze[x][y--] = z++;
            }
            y++;
            x--;

            for (; maze[x][y] == 0 && x > -1;) {
                maze[x--][y] = z++;
            }
            x++;
            y++;
        }
        pri();
        cout << endl;
    }
    return 0;
}

感觉自己做的有点麻烦,后期想到更简单的就重新编辑下吧。

posted @ 2018-11-28 20:33  阳离子  阅读(1022)  评论(0编辑  收藏  举报