回答編集履歴
10
コード修正
test
CHANGED
@@ -28,9 +28,53 @@
|
|
28
28
|
|
29
29
|
---
|
30
30
|
|
31
|
-
今回`A`は`1`決め打ちということなので、以下の
|
31
|
+
今回`A`は`1`決め打ちということなので、以下の4行を修正とコメントの`total()`修正で一応動きます。
|
32
32
|
|
33
33
|
```diff
|
34
|
+
|
35
|
+
int draw(void)
|
36
|
+
|
37
|
+
{
|
38
|
+
|
39
|
+
static int card[53];
|
40
|
+
|
41
|
+
static int count = 0; // 引いた枚数
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
srand(time(NULL)); // 乱数のタネ
|
46
|
+
|
47
|
+
int r;
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
do {
|
52
|
+
|
53
|
+
r = rand() % 52 + 1; //1~52の乱数
|
54
|
+
|
55
|
+
card[r]++; //2回目以上なら2以上
|
56
|
+
|
57
|
+
} while (card[r] > 1 && count < 52);
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
- if (count > 52) {
|
62
|
+
|
63
|
+
+ if (count >= 52) {
|
64
|
+
|
65
|
+
r = 0;
|
66
|
+
|
67
|
+
}
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
count++;
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
return r;
|
76
|
+
|
77
|
+
}
|
34
78
|
|
35
79
|
-void change(int n)
|
36
80
|
|
9
文言修正
test
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
---
|
30
30
|
|
31
|
-
今回`A`は`1`決め打ちということなので、以下の
|
31
|
+
今回`A`は`1`決め打ちということなので、以下の3行を修正とコメントの`total()`修正で一応動きます。
|
32
32
|
|
33
33
|
```diff
|
34
34
|
|
8
コード修正(Aについて勘違いしていたのを修正)
test
CHANGED
@@ -29,8 +29,6 @@
|
|
29
29
|
---
|
30
30
|
|
31
31
|
今回`A`は`1`決め打ちということなので、以下の4行を修正とコメントの`total()`修正で一応動きます。
|
32
|
-
|
33
|
-
よく見たら、`1`を`A`と表示しているだけで、`A`は`10`として足していたので修正
|
34
32
|
|
35
33
|
```diff
|
36
34
|
|
@@ -68,9 +66,7 @@
|
|
68
66
|
|
69
67
|
switch (number) {
|
70
68
|
|
71
|
-
|
69
|
+
case 1: cout << "A"; break;
|
72
|
-
|
73
|
-
+ case 10: cout << "A"; number = 1; break; // `1`を`A`と表示しているだけで、`A`は`10`として足していたので修正
|
74
70
|
|
75
71
|
case 11: cout << "J"; break;
|
76
72
|
|
7
`1`を`A`と表示しているだけで、`A`は`10`として足していたので修正
test
CHANGED
@@ -28,7 +28,9 @@
|
|
28
28
|
|
29
29
|
---
|
30
30
|
|
31
|
-
今回`A`は`1`決め打ちということなので、以下の
|
31
|
+
今回`A`は`1`決め打ちということなので、以下の4行を修正とコメントの`total()`修正で一応動きます。
|
32
|
+
|
33
|
+
よく見たら、`1`を`A`と表示しているだけで、`A`は`10`として足していたので修正
|
32
34
|
|
33
35
|
```diff
|
34
36
|
|
@@ -66,7 +68,9 @@
|
|
66
68
|
|
67
69
|
switch (number) {
|
68
70
|
|
69
|
-
case 1: cout << "A"; break;
|
71
|
+
- case 1: cout << "A"; break;
|
72
|
+
|
73
|
+
+ case 10: cout << "A"; number = 1; break; // `1`を`A`と表示しているだけで、`A`は`10`として足していたので修正
|
70
74
|
|
71
75
|
case 11: cout << "J"; break;
|
72
76
|
|
6
コード追記
test
CHANGED
@@ -23,3 +23,113 @@
|
|
23
23
|
カードを引く処理は別の場所でやっていて、結果を表示するだけならループはいりませんよね。
|
24
24
|
|
25
25
|
それとも`21`を超えていた場合に`A`を`1`と`11`切り替えて計算しなおす処理を入れようとして、そのコードがないままループだけとなっていたのでしょうか。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
今回`A`は`1`決め打ちということなので、以下の3行を修正とコメントの`total()`修正で一応動きます。
|
32
|
+
|
33
|
+
```diff
|
34
|
+
|
35
|
+
-void change(int n)
|
36
|
+
|
37
|
+
+int change(int n)
|
38
|
+
|
39
|
+
{
|
40
|
+
|
41
|
+
int suit, number; //スートと数字
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
suit = (n - 1) / 13; //スートの計算
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
number = n - 13 * suit; //数字の計算
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
switch (suit) {
|
54
|
+
|
55
|
+
case 0: cout << "S"; break;
|
56
|
+
|
57
|
+
case 1: cout << "H"; break;
|
58
|
+
|
59
|
+
case 2: cout << "D"; break;
|
60
|
+
|
61
|
+
case 3: cout << "C"; break;
|
62
|
+
|
63
|
+
}
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
switch (number) {
|
68
|
+
|
69
|
+
case 1: cout << "A"; break;
|
70
|
+
|
71
|
+
case 11: cout << "J"; break;
|
72
|
+
|
73
|
+
case 12: cout << "Q"; break;
|
74
|
+
|
75
|
+
case 13: cout << "K"; break;
|
76
|
+
|
77
|
+
default: cout << number;
|
78
|
+
|
79
|
+
}
|
80
|
+
|
81
|
+
+ return number;
|
82
|
+
|
83
|
+
}
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
int main()
|
88
|
+
|
89
|
+
{
|
90
|
+
|
91
|
+
char check; // YかN
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
int number; //draw関数で引いた数字
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
do {
|
100
|
+
|
101
|
+
cout << "カードを引きますか?(Y/N):";
|
102
|
+
|
103
|
+
cin >> check;
|
104
|
+
|
105
|
+
if (check == 'Y') {
|
106
|
+
|
107
|
+
number = draw();
|
108
|
+
|
109
|
+
if (number) { // 0でなかったらカードを表示
|
110
|
+
|
111
|
+
- change(number); // カードの数字とスートを返す
|
112
|
+
|
113
|
+
+ number = change(number); // カードの数字とスートを返す
|
114
|
+
|
115
|
+
cout << endl;
|
116
|
+
|
117
|
+
}
|
118
|
+
|
119
|
+
else {
|
120
|
+
|
121
|
+
check = 'N';
|
122
|
+
|
123
|
+
cout << "カードがありません。" << endl;
|
124
|
+
|
125
|
+
}
|
126
|
+
|
127
|
+
total(number);
|
128
|
+
|
129
|
+
}
|
130
|
+
|
131
|
+
} while (check != 'N');
|
132
|
+
|
133
|
+
}
|
134
|
+
|
135
|
+
```
|
5
ループについて追記
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
---
|
12
12
|
|
13
|
-
ブラックジャックでは`A`は、1と11のどちらか都合の良いほうとして扱えるのに、その処理がありません。
|
13
|
+
ブラックジャックでは`A`は、`1`と`11`のどちらか都合の良いほうとして扱えるのに、その処理がありません。
|
14
14
|
|
15
15
|
引かれたカードを覚えておいて合計を求める際に足すか、`11`として足しておき合計が`21`を超える場合は最大で`A`を引いた枚数まで`10`を引いて`21`以下になるなら続行する処理がいります。
|
16
16
|
|
@@ -21,3 +21,5 @@
|
|
21
21
|
貼られたコードだと`total()`は`goukei`が21未満だった場合、無限ループして`goukei`を表示し続けています。
|
22
22
|
|
23
23
|
カードを引く処理は別の場所でやっていて、結果を表示するだけならループはいりませんよね。
|
24
|
+
|
25
|
+
それとも`21`を超えていた場合に`A`を`1`と`11`切り替えて計算しなおす処理を入れようとして、そのコードがないままループだけとなっていたのでしょうか。
|
4
文言修正、指摘転記
test
CHANGED
@@ -1,5 +1,23 @@
|
|
1
|
-
|
1
|
+
> 適当な数字が予め足されている状態ででます。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
`goukei`の初期値は`0`で、足されていません。
|
6
|
+
|
7
|
+
`draw()`で`1`~`52`を返し、その値をそのまま`total()`に渡しているためスペード以外のカードでは大きな値が足されているだけです。
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
---
|
12
|
+
|
5
|
-
|
13
|
+
ブラックジャックでは`A`は、1と11のどちらか都合の良いほうとして扱えるのに、その処理がありません。
|
14
|
+
|
15
|
+
引かれたカードを覚えておいて合計を求める際に足すか、`11`として足しておき合計が`21`を超える場合は最大で`A`を引いた枚数まで`10`を引いて`21`以下になるなら続行する処理がいります。
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
---
|
20
|
+
|
21
|
+
貼られたコードだと`total()`は`goukei`が21未満だった場合、無限ループして`goukei`を表示し続けています。
|
22
|
+
|
23
|
+
カードを引く処理は別の場所でやっていて、結果を表示するだけならループはいりませんよね。
|
3
指摘追加
test
CHANGED
@@ -1 +1,5 @@
|
|
1
1
|
`draw()`で`1`~`52`を返し、その値をそのまま`total()`に渡しているためスペード以外のカードでは大きな値が足されています。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
また、ブラックジャックでは`A`は、1と11のどちらか都合の良いほうとして扱えるのに、その処理がありません。
|
2
文言修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
`draw`で`1`~`52`を返し、その値をそのまま`total()`に渡しているため大きな値が足されています。
|
1
|
+
`draw()`で`1`~`52`を返し、その値をそのまま`total()`に渡しているためスペード以外のカードでは大きな値が足されています。
|
1
間違い修正
test
CHANGED
@@ -1,3 +1 @@
|
|
1
|
-
`main()`内の`number`に初期値を設定していないため不定値が入っています。
|
2
|
-
|
3
|
-
|
1
|
+
`draw`で`1`~`52`を返し、その値をそのまま`total()`に渡しているため大きな値が足されています。
|