プロが教える店舗&オフィスのセキュリティ対策術

C言語でDxlibを使って3x3の奇数魔法陣を作っているのですが、処理の方法がわかりません。

youso[3][3]の箱を作りました。

これを全部for文を使って0で初期化もしました。

最後に画面に表示させるのもfor文を使ってできました。

この真ん中のメインの数字を格納するプログラムで、for文とif文を使って作りたいのですが考えてもわかりません。
youso[0][1]に1を代入してから作ります

1〜9の数字当てはめるために変数countも作ってます。

1より右上に数値を格納していくのですが、右へはみ出すとはみ出した行の最左、上へはみだすと、はみ出した列のの最下、埋まっている場合if( 0 != ???)元の位置の真下、 下へはみ出した時は同列の最上へ。

ここまでは考えましたがわからないです。

A 回答 (2件)

本当に「魔法陣」を作ってるの? 「魔方陣」じゃなく? どうやって Dxlib で「魔法陣」を作るんだろう....



さておき「youso[3][3]の箱」とやらは何を表すためのもの? そして, 「処理の方法がわかりません」と書いてあるけど「手でやれ」っていわれたらできる?

具体的にはどこまで作れている?
    • good
    • 0
この回答へのお礼

ダンブルドア先生からの課題です...
youso 3 3と言うのは数値を入れるためのセルです。

今は画面に3×3で
0 1 0
0 0 0
0 0 0
と表示されるところまでです。

お礼日時:2021/08/17 23:30

/* 5 x 5 魔方陣のケース */



#include <stdio.h>
#include <stdlib.h>

#define N 5

int main(void) {
 int magic_square[N][N] = {{0, 0, 0, 0, 0},
              {0, 0, 0, 0, 0},
              {0, 0, 0, 0, 0},
              {0, 0, 0, 0, 0},
              {0, 0, 0, 0, 0}};
 int i = 0, j = 2, NUM = 1;
 int tmp_i, tmp_j;
 while (NUM < N * N + 1) {
  magic_square[i][j] = NUM;
  tmp_i = (i - 1 < 0 ? N - 1 : i - 1);
  tmp_j = (j + 1 == N ? 0 : j + 1);
  if (magic_square[tmp_i][tmp_j] != 0) {
   tmp_i = i + 1, tmp_j = j;
  }
  i = tmp_i, j = tmp_j, NUM++;
 }

 for (int i = 0; i < N; i++) {
  for (int j = 0; j < N; j++) {
   printf("%2d ", magic_square[i][j]);
  }
  printf("\n");
 }
 return EXIT_SUCCESS;
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A