回答編集履歴
7
細かい部分の修正
test
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
**修正前の質問タイトル:『C言語 配列 魔法陣の和』に対する指摘**
|
2
|
+
|
1
3
|
魔法陣ではなく魔方陣だと思いますが、どちらにせよ意味が通じません。
|
2
4
|
|
3
5
|
> 魔方陣(まほうじん、英:Magic square)とは、**n×n 個の正方形**の方陣に数字を配置し、縦・横・対角線のいずれの列についても、その列の数字の合計が同じになるもののことである。**特に1から方陣のマスの総数 n2 までの数字を1つずつ過不足なく使ったものを言う**。
|
@@ -36,13 +38,13 @@
|
|
36
38
|
|
37
39
|
|
38
40
|
|
39
|
-
追記を受けて
|
41
|
+
質問の追記/修正を受けて
|
40
42
|
|
41
43
|
---
|
42
44
|
|
43
45
|
とりあえずこんなコードを組んでみました。
|
44
46
|
|
45
|
-
『ある座標を打ち込まれたときに、可能な限り左下に突き進んだ座標を返す』
|
47
|
+
**『ある座標を打ち込まれたときに、可能な限り左下に突き進んだ座標を返す』**
|
46
48
|
|
47
49
|
```C
|
48
50
|
|
@@ -144,7 +146,7 @@
|
|
144
146
|
|
145
147
|
- なぜ上記のようなコードを例として示したのか?
|
146
148
|
|
147
|
-
- コードがところどころ書き換えられているが、真意はなにか?
|
149
|
+
- コードがところどころ(特に変数名が)書き換えられているが、真意はなにか?
|
148
150
|
|
149
151
|
- 『左下から右上へ』の**一直線**の和を考えるときに、二重ループが必要か?
|
150
152
|
|
@@ -171,3 +173,7 @@
|
|
171
173
|
- 特定の入力の下で動かない
|
172
174
|
|
173
175
|
- 結果が想定通りでない
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
今回はわりあい期待する結果が自明ですが、それでも期待する入出力は書いた方がよいです。
|
6
修正
test
CHANGED
@@ -88,9 +88,9 @@
|
|
88
88
|
|
89
89
|
int x, y;
|
90
90
|
|
91
|
-
printf("x?"); scanf("%
|
91
|
+
printf("x?"); scanf("%d", &x);
|
92
92
|
|
93
|
-
printf("y?"); scanf("%
|
93
|
+
printf("y?"); scanf("%d", &y);
|
94
94
|
|
95
95
|
|
96
96
|
|
5
追記に対して
test
CHANGED
@@ -36,6 +36,124 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
+
追記を受けて
|
40
|
+
|
41
|
+
---
|
42
|
+
|
43
|
+
とりあえずこんなコードを組んでみました。
|
44
|
+
|
45
|
+
『ある座標を打ち込まれたときに、可能な限り左下に突き進んだ座標を返す』
|
46
|
+
|
47
|
+
```C
|
48
|
+
|
49
|
+
#include <stdio.h>
|
50
|
+
|
51
|
+
#include <stdlib.h>
|
52
|
+
|
53
|
+
#define X 4
|
54
|
+
|
55
|
+
#define Y 3
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
int main(void) {
|
60
|
+
|
61
|
+
int mat[Y][X]={
|
62
|
+
|
63
|
+
{1, 7, 1, 5},
|
64
|
+
|
65
|
+
{0, 2, 8, 1},
|
66
|
+
|
67
|
+
{4, 0, 2, 8}
|
68
|
+
|
69
|
+
};
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
printf("配列mat[Y][X]:\n");
|
74
|
+
|
75
|
+
for(int yi=0; yi<Y; yi++){
|
76
|
+
|
77
|
+
for(int xi=0; xi<X; xi++){
|
78
|
+
|
79
|
+
printf("%d ", mat[yi][xi]);
|
80
|
+
|
81
|
+
}
|
82
|
+
|
83
|
+
printf("\n");
|
84
|
+
|
85
|
+
}
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
int x, y;
|
90
|
+
|
91
|
+
printf("x?"); scanf("%ud", &x);
|
92
|
+
|
93
|
+
printf("y?"); scanf("%ud", &y);
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
if(!(0 <= x && x < X)) exit(1);
|
98
|
+
|
99
|
+
if(!(0 <= y && y < Y)) exit(1);
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
while(x > 0 && y < Y - 1) {
|
104
|
+
|
105
|
+
x--; y++;
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
printf("x:%d y:%d\n", x, y);
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
return 0;
|
114
|
+
|
115
|
+
}
|
116
|
+
|
117
|
+
```
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
**実行例**
|
122
|
+
|
123
|
+
```
|
124
|
+
|
125
|
+
配列mat[Y][X]:
|
126
|
+
|
127
|
+
1 7 1 5
|
128
|
+
|
129
|
+
0 2 8 1
|
130
|
+
|
131
|
+
4 0 2 8
|
132
|
+
|
133
|
+
x?1
|
134
|
+
|
135
|
+
y?1
|
136
|
+
|
137
|
+
x:0 y:2
|
138
|
+
|
139
|
+
```
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
次の三点を考えてみてください。
|
144
|
+
|
145
|
+
- なぜ上記のようなコードを例として示したのか?
|
146
|
+
|
147
|
+
- コードがところどころ書き換えられているが、真意はなにか?
|
148
|
+
|
149
|
+
- 『左下から右上へ』の**一直線**の和を考えるときに、二重ループが必要か?
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
どうしてもわからなければ、わからない点を自分なりに整理してコメントをください。
|
154
|
+
|
155
|
+
|
156
|
+
|
39
157
|
---
|
40
158
|
|
41
159
|
teratailには、上記のようにコードを見やすく表示する機能があります。
|
4
x y の導入
test
CHANGED
@@ -20,11 +20,11 @@
|
|
20
20
|
|
21
21
|
printf("配列a[M][N]:\n");
|
22
22
|
|
23
|
-
for(int
|
23
|
+
for(int y=0; y<M; y++){
|
24
24
|
|
25
|
-
for(int
|
25
|
+
for(int x=0; x<N; x++){
|
26
26
|
|
27
|
-
printf("%d ", a[
|
27
|
+
printf("%d ", a[y][x]);
|
28
28
|
|
29
29
|
}
|
30
30
|
|
3
引用の強調
test
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
魔法陣ではなく魔方陣だと思いますが、どちらにせよ意味が通じません。
|
2
2
|
|
3
|
-
> 魔方陣(まほうじん、英:Magic square)とは、n×n 個の正方形の方陣に数字を配置し、縦・横・対角線のいずれの列についても、その列の数字の合計が同じになるもののことである。特に1から方陣のマスの総数 n2 までの数字を1つずつ過不足なく使ったものを言う。
|
3
|
+
> 魔方陣(まほうじん、英:Magic square)とは、**n×n 個の正方形**の方陣に数字を配置し、縦・横・対角線のいずれの列についても、その列の数字の合計が同じになるもののことである。**特に1から方陣のマスの総数 n2 までの数字を1つずつ過不足なく使ったものを言う**。
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
引用元:[魔方陣 - Wikipedia](https://ja.wikipedia.org/wiki/%E9%AD%94%E6%96%B9%E9%99%A3)
|
7
|
+
引用元:[魔方陣 - Wikipedia](https://ja.wikipedia.org/wiki/%E9%AD%94%E6%96%B9%E9%99%A3) (**太字は引用者**)
|
8
8
|
|
9
9
|
ご提示のプログラムのどこに魔方陣があるのでしょうか。
|
10
10
|
|
2
引用元書いてなかった
test
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
> 魔方陣(まほうじん、英:Magic square)とは、n×n 個の正方形の方陣に数字を配置し、縦・横・対角線のいずれの列についても、その列の数字の合計が同じになるもののことである。特に1から方陣のマスの総数 n2 までの数字を1つずつ過不足なく使ったものを言う。
|
4
4
|
|
5
5
|
|
6
|
+
|
7
|
+
引用元:[魔方陣 - Wikipedia](https://ja.wikipedia.org/wiki/%E9%AD%94%E6%96%B9%E9%99%A3)
|
6
8
|
|
7
9
|
ご提示のプログラムのどこに魔方陣があるのでしょうか。
|
8
10
|
|
1
追記
test
CHANGED
@@ -39,3 +39,15 @@
|
|
39
39
|
teratailには、上記のようにコードを見やすく表示する機能があります。
|
40
40
|
|
41
41
|
編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
また、質問をする際には、上手くいかない点を明確にした方がよいです。
|
46
|
+
|
47
|
+
- コンパイルが出来ない
|
48
|
+
|
49
|
+
- 実行中に落ちる
|
50
|
+
|
51
|
+
- 特定の入力の下で動かない
|
52
|
+
|
53
|
+
- 結果が想定通りでない
|