dポイントプレゼントキャンペーン実施中!

下記のプログラム(奇数魔方陣)
について最初のfor文からどのような処理が行われているかわかりません。
{
int mahoujin[10][10],x,y,i,n = 7;

x = n / 2 + 1;
y = 1;
mahoujin[x][y] = 1;
for( i = 2; i <= n * n; i++ ){
if( i % n == 1 ){
y = y + 1;
}else{
x = x + 1;
y = y - 1;
}
if( x > n ) x = 1;
if( y < 1 ) y = n;
mahoujin[x][y] = i;
}
for( y = 1; y <= n; y++ ){
for( x = 1; x <= n; x++ ){
printf( "%3d ", mahoujin[x][y] );
}
printf( "\n" );
}
特にわからないのがif文で分岐になるところどのようなことが行われているかがわからないです。どなたか教えて頂けるとうれしいです。

A 回答 (4件)

if( x > n ) x = 1;


if( y < 1 ) y = n;

について補足いたします。

xは横軸のカウンタで順番に1ずつあがっていきます。
配列は、7までしかありませんから7列目をを越えると1列目に戻るようになっています。

また、yは縦軸のカウンタで1ずつ減っていきます。
1より小さくなったときn(この場合7)行目にセットするようになっています。

おわかりでしょうか?
    • good
    • 0

再度補足です。



実行するとこのような結果が得られます。

30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20


x = x + 1;
y = y - 1;

は数字が右斜め上にあがっていく様子を表します。


if( x > n ) x = 1;
if( y < 1 ) y = n;

は配列からあふれたときの処理です。

この回答への補足

x = x + 1;
y = y - 1;

は数字が右斜め上にあがっていく様子を表します。


if( x > n ) x = 1;
if( y < 1 ) y = n;

は配列からあふれたときの処理です。
>この部分の処理内容がまだ理解できません
とくにif文のところはこのプログラムで一つ例を挙げて説明していただけませんでしょうか?
ちなみにnは7ということはわかりますが、
7よりx が大きい時が1?1よりyが小さいときが7?
がいまいち理解できません。

補足日時:2003/10/29 21:35
    • good
    • 0

補足です。



i % n == 1

というのは、 i を 7で割ったあまりが1の場合です。

今回の場合、n=7ですので、1あまるのは、8,15,22,29,36,43となります。
このときに、y=y+1 つまり、前の値の下の段に移動します。
    • good
    • 0
この回答へのお礼

この部分はわかりました。
ありがとうございます。

お礼日時:2003/10/29 21:34

魔法陣の数字の並び方に規則性があります。


その規則をプログラム上で実現しているだけです。
あなたがかかれているプログラムを実行し、1から順に数字を見ていけば規則性がわかります。
 最初のif文は段の変化するところ、残りのif文は魔法陣の配列からはみ出したときの処理ですね。

この回答への補足

for( i = 2; i <= n * n; i++ ){
if( i % n == 1 ){ >ここで1から順に入るのはわかります。が、ここでどのような場合が
y = y + 1;
になるのかがわかりません。
}else{
x = x + 1;
y = y - 1;
}
if( x > n ) x = 1;
if( y < 1 ) y = n;
mahoujin[x][y] = i;
}
>また上記までの流れを数値が格納されるにつれどうなっていくというのがわかりません。

補足日時:2003/10/29 19:05
    • good
    • 0

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