• 締切済み

プログラミングの配列で

3*3の魔法陣を #include<stdio.h> int main(void) { int mg[3][3],i=1,j,no=3,k; j=(no+1)/2; mg[1][j]=1; for(k=2;k<=no*no;k++){ if(k%no==1) i++; else if(i==1){ i=no; j++; } else if(j==no){ i--; j=1; } else { i--; j++; } mg[i][j]=k; } for(i=1;i<=no;i++){ for(j=1;j<=no;j++) printf("%3d",mg[i][j]); printf("\n"); } return(0); } と作ってみたのですが、 if文やelse文内のi++やi=などを、 すべてfor文を使って表したい場合、 どのように変更したらいいですか? 他の部分(if文やelse文以外)をいじってもいいので、 教えてください。

みんなの回答

回答No.4

   訂正 i = (i + 2) % SIZE -> i = (i + SIZE - 1) % SIZE  

回答No.3

   ひょっとして、こういうこと? #include <stdio.h> #define SIZE 5 // Only odd number int main(void) { int mg[SIZE][SIZE]; int num, i, j; for(num = 1, i = 0, j = SIZE / 2; num <= SIZE * SIZE; (num % SIZE == 1) ? (i = (i + 1) % SIZE) : ((i = (i + 2) % SIZE), (j = (j + 1) % SIZE))){ mg[i][j] = num ++; } for(i = 0; i < SIZE; i ++){ for(j = 0; j < SIZE; j ++) printf("%3d", mg[i][j]); printf("\n"); } return 0; }  

  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.2

[1] いじるも何も、配列長を超えるために   そもそも動くプログラムではない。 [2] あなたが今したいことと、このプログラムの   (既存の)ロジックは全く異なる。 確認。このプログラムは本当にあなたが作ったのですか?

回答No.1

   とりあえず、 "int mg[3][3]"は、mg[0][0]~mg[2][2]です。  

関連するQ&A

専門家に質問してみよう