C言語関係掲示板

過去ログ

No.467.魔方陣を表示するプログラム

[戻る] [ホームページ]
No.3382

わからないんです。
投稿者---リク(2002/11/08 17:18:27)


魔方陣をつくりたいです。n*nの正方行列に1〜nの2乗の数を使います。
『最下段中央を1とする』
a.『ある場所がxで、その右下があいているとき、そこにx+1をおく』
b.『ある場所がxで、その右下に数が入っているとき、ある場所の上にx+1を  おく』
『行列のすべての場所が埋まるまで、a,bを繰り返す』

3*3(1〜9までの数を使う)
5*5(1〜25までの数を使う)この魔方陣を表示するプログラムを作りたいです。どうすればいいでしょう?おねがいします。


No.3384

Re:わからないんです。
投稿者---aki(2002/11/08 18:27:50)


#include <stdio.h>

#define MAX_SIZE 19

int magic[MAX_SIZE][MAX_SIZE];

void make_magic(int size)
{
    int x, y, n;

    for (x = 0; x < size; x++)
        for (y = 0; y < size; y++)
            magic[x][y] = 0;

    x = size - 1;
    y = x / 2;

    for (n = 1; n <= size * size; n++) {
        magic[x][y] = n;
        if  (magic[(x + 1) % size][(y + 1) % size] == 0) {
            x = (x + 1) % size;
            y = (y + 1) % size;
        } else
            x--;
    }
}

void print_magic(int size)
{
    int x, y;

    for (x = 0; x < size; x++) {
        for (y = 0; y < size; y++)
            printf("%3d ", magic[x][y]);
        putchar('\n');
    }
}

int main(void)
{
    int size;

    while (printf("size(odd)? "), scanf("%d", &size) == 1) {
        if (1 <= size && size <= MAX_SIZE && size % 2) {
            make_magic(size);
            print_magic(size);
        }
    }
    return 0;
}