- 締切済み
プログラミングの配列で
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文以外)をいじってもいいので、 教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- yaemon_2006
- ベストアンサー率22% (50/220)
訂正 i = (i + 2) % SIZE -> i = (i + SIZE - 1) % SIZE
- yaemon_2006
- ベストアンサー率22% (50/220)
ひょっとして、こういうこと? #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)
[1] いじるも何も、配列長を超えるために そもそも動くプログラムではない。 [2] あなたが今したいことと、このプログラムの (既存の)ロジックは全く異なる。 確認。このプログラムは本当にあなたが作ったのですか?
- yaemon_2006
- ベストアンサー率22% (50/220)
とりあえず、 "int mg[3][3]"は、mg[0][0]~mg[2][2]です。