C言語関係掲示板

過去ログ

No760 魔方陣について

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

魔方陣について
投稿者---ナオ(2003/09/28 22:53:20)


n*nの正方形で、どの行、どの列、どの対角線のn個の数の和が一定の魔方陣を作成します。条件は、
#一番上の行の中央の列に1を置く。
#整数kの斜め右上(α)に次の整数k+1を置く。ただし、
 −αがすでにふさがっている場合は、今の位置のすぐ下に置く。
 −αが右上隅にはみ出す場合には、今の位置のすぐ下に置く。
 −αが一番上の行からはみ出す場合には、今の位置の右隣の列の一番下の行に置く。
 −αが一番右の列からはみ出す場合には、今の位置の上の行の一番左の列に置く。
この条件でn(100以下の奇数)をキーボードから入力して、n*nの魔方陣を表示するC言語プログラムを作ります。誰か教えてください。お願いします。



No.9466

Re:魔方陣について
投稿者---YuO(2003/09/29 00:08:23)


> 誰か教えてください。お願いします。

「何を」教えて欲しいのですか?


それから,【掲示板ご利用上の注意】は読んで実行して下さい。
2番目・5番目の項目を読んで実行した形跡が見あたりませんよ。


No.9471

Re:魔方陣について
投稿者---nop(2003/09/29 11:52:49)


>n*nの正方形で、どの行、どの列、どの対角線のn個の数の和が一定の魔方陣を作成します。
(中略)
>誰か教えてください。お願いします。

とりあえず、条件通りに作成したら、
きちんと魔方陣が作成できましたが…。

一体何がわからないのでしょうか?

No.9597

Re:魔方陣について
投稿者---かずま(2003/10/07 00:05:05)


> この条件でn(100以下の奇数)をキーボードから入力して、
> n*nの魔方陣を表示するC言語プログラムを作ります。
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n;
    while (printf("odd number: "), scanf("%d", &n) == 1)
        if (n & 1  &&  (unsigned)n < 100) {
            int i, j, k = 0, r = n, c = n + n/2;
            int *b = malloc(n * n * sizeof(int));
            if (b == NULL) return 1;
            for (i = 0; i < n; i++, r += 2, c--)
                for (j = 0; j < n; j++)
                    b[(r-j)%n*n + (c+j)%n] = ++k;
            for (i = 0; i < n*n; i++)
                printf("%3d%c", b[i], (i+1)%n ? ' ' : '\n');
            free(b);
        }
    return 0;
}