5章理解度確認問題

自動販売機おつり計算プログラム・改(jihanki2.c)

同じような計算を繰り返すだけのプログラムなので、硬貨の種類を配列に格納し、繰り返し文で計算させるようプログラムを改造する。

int kouka[4] = {500, 100, 50, 10};

万年カレンダー表示プログラムを美しく改造する:その1(cal2.c)

末日の判定をif文で行っていたが、末日を配列に格納し、月の値によって直接得るようにプログラムを改造する。

int matubi[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

※配列の0番目はダミーとし、プログラム内では使わない。
(1番目=1月 2番目=2月 ・・・と考える)

魔法陣作成プログラム(mahojin.c)

5×5の魔法陣を出力するプログラムを作成する。

【実行結果】

大きさ5の魔法陣
15 16  22  3  9
 8 14  20 21  2
 1  7  13 19 25
24  5   6 12 18
17 23   4 10 11

【考え方】

<魔法陣とは>

n×nのマス目(nは奇数)に、縦、横、斜めのどの合計も等しくなるように、1,2,3,〜,(n×n)の整数を入れたもの。

<魔法陣の作り方>

  1. 作成する大きさの二次元配列を宣言し、すべての要素をゼロクリアする。
    00000
    00000
    00000
    00000
    00000
  2. 「1」を第0列の真ん中に入れる
    00000
    00000
    10000
    00000
    00000
  3. 「2」以降の整数を、次の手順で配列に格納していく。
    1. 最後に入れた位置から見て、 左上の位置を候補とする。 候補が欄外となる場合は、 図のように欄外にも魔法陣があるものと考え、 対応する位置を候補とする。
           00000
           00000
           10000
           00000
           00000
    2. 候補位置に何も入っていない(0が入ってる)ならば、その位置に整数を格納する。 すでに値が入っているなら、最後に入れた位置の右側に整数を格納する。
      (候補位置にすでに値が入っている場合、最後に入れた位置の右側は必ず空いている)
      00030
      00002
      10000
      05600
      00400
  4. 魔法陣が全部埋まれば、配列の内容を出力する。

[ TOP ]