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

[ TOP ]