C言語関係掲示板

過去ログ

No758 魔方陣の作り方

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

Re:魔方陣の作り方
投稿者---かずま(2003/09/24 18:25:11)

> 処理内容は、
> (1)第1行目の中央に1を入れる。
> (2)次に入れる数を5で割る。
>  ・余りが1の場合、次の数を下のますめに入れる。
>  ・それ以外は斜め上に入れる。
> (3)上にはみ出した場合は、その列の1番下のますめに入れる。
> (4)右にはみ出した場合は、その行の1番左のますめに入れる。

そこまで詳しく処理内容がわかっているということは、
プログラムはできたも同然です。

#include <stdio.h>

int main(void)
{
    int b[5][5], n = 1, i = 0, j = 2;

    b[i][j] = n;         /* 第1行目の中央に1を入れる */
    for (n = 2; n <= 25; n++) {
        if (n % 5 == 1)  /* 次に入れる数を5で割り、余りが1の場合 */
            i++;         /*    下のますめに  */
        else             /* それ以外は       */
            i--, j++;    /*    斜め上に      */
        if (i < 0)       /* 上にはみ出した場合          */
            i = 4;       /*   その列の1番下のますめに  */
        if (j == 5)      /* 右にはみ出した場合は        */
            j = 0;       /*   その行の1番左のますめに  */
        b[i][j] = n;     /* 入れる */
    }
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++)
            printf("%3d", b[i][j]);
        puts("");
    }
    return 0;
}