![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_02.png?5a7ff87)
下記のプログラム(奇数魔方陣)
について最初の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件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
if( x > n ) x = 1;
if( y < 1 ) y = n;
について補足いたします。
xは横軸のカウンタで順番に1ずつあがっていきます。
配列は、7までしかありませんから7列目をを越えると1列目に戻るようになっています。
また、yは縦軸のカウンタで1ずつ減っていきます。
1より小さくなったときn(この場合7)行目にセットするようになっています。
おわかりでしょうか?
No.3
- 回答日時:
再度補足です。
実行するとこのような結果が得られます。
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?
がいまいち理解できません。
No.1
- 回答日時:
魔法陣の数字の並び方に規則性があります。
その規則をプログラム上で実現しているだけです。
あなたがかかれているプログラムを実行し、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;
}
>また上記までの流れを数値が格納されるにつれどうなっていくというのがわかりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列で格納したものをmsgboxで...
-
配列を含む構造体の初期値について
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
VBでC言語のポインタみたい...
-
メモリの初期値
-
C言語で特定列だけを抽出して配...
-
先頭アドレスとは何ですか?
-
データベースの値を構造体へ代入
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
VBで構造体の配列を関数に渡す...
-
複数の選択範囲の行番号を個別...
-
【速いブラインドタッチ】手を...
-
VB.NET 構造体の配列の検索機能...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
defineを使った配列
-
4勤2休のシフト作成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
配列の参照渡しで型が一致しま...
-
パイソンの
-
C# Listを使わずに2次元配列の...
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
【C言語】配列の中に配列を入れ...
-
メモリの初期値
-
VBで構造体の配列を関数に渡す...
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
2次元配列を戻り値とする関数?
-
【速いブラインドタッチ】手を...
おすすめ情報