teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

continue をやめて if ~ elseif ~

2018/04/11 06:19

投稿

tacsheaven
tacsheaven

スコア13707

answer CHANGED
@@ -18,19 +18,17 @@
18
18
  if (T == 1 && a[n] == 10) { /* ストライク = フレーム内の1投目で10本倒し */
19
19
  S = S + a[n+1] + a[n+2]; // 後ろ2投分を加算する
20
20
  F = F + 1; // フレームを一つ進める
21
- continue;
22
- }
23
- if (T == 2 && a[n]+a[n-1] == 10) { /* スペア = フレーム内の2投目で、1投目と合わせて10本倒し */
21
+ } else if (T == 2 && a[n]+a[n-1] == 10) { /* スペア = フレーム内の2投目で、1投目と合わせて10本倒し */
24
22
  S = S + a[n+1]; // 後ろ1投分を加算する
25
23
  F = F + 1;
26
24
  T = 1;
25
+ } else {
27
- continue;
26
+ T = T + 1;
27
+ if (T >= 3) { // 1フレーム2投までなので、次のフレームに移る
28
+ F = F + 1;
29
+ T = 1;
30
+ }
28
31
  }
29
- T = T + 1;
30
- if (T >= 3) { // 1フレーム2投までなので、次のフレームに移る
31
- F = F + 1;
32
- T = 1;
33
- }
34
32
  } else {
35
33
  /* 10フレームはボーナス加算なしなのでそのまま継続 */
36
34
  T = T + 1;

2

計算アルゴリズムを記述

2018/04/11 06:19

投稿

tacsheaven
tacsheaven

スコア13707

answer CHANGED
@@ -2,4 +2,38 @@
2
2
  for j in range(1, len(a)-1):
3
3
  if a[j-1] != 0 and a[j] == 10
4
4
  ```
5
- ですから、1フレームがストライクだった時、この条件を満たさないので加算されていないのでは。
5
+ ですから、1フレームがストライクだった時、この条件を満たさないので加算されていないのでは。
6
+
7
+ ボウリングのスコアは1フレーム目から順番に計算していくしかないので、手順を大きく組み替える必要があると思います。
8
+ 私は Python だとちょっとわからないので、ざっくり書いてみます。
9
+ ```
10
+ var S = 0; /* トータルスコア */
11
+ var F = 1; /* フレーム */
12
+ var T = 1; /* フレーム内投球回 */
13
+
14
+ /* 投球による倒したピンの数が、a[] に入っている */
15
+ for(n = 0; n < a.length-1; n++) {
16
+ S = S + a[n];
17
+ if (F != 10) {
18
+ if (T == 1 && a[n] == 10) { /* ストライク = フレーム内の1投目で10本倒し */
19
+ S = S + a[n+1] + a[n+2]; // 後ろ2投分を加算する
20
+ F = F + 1; // フレームを一つ進める
21
+ continue;
22
+ }
23
+ if (T == 2 && a[n]+a[n-1] == 10) { /* スペア = フレーム内の2投目で、1投目と合わせて10本倒し */
24
+ S = S + a[n+1]; // 後ろ1投分を加算する
25
+ F = F + 1;
26
+ T = 1;
27
+ continue;
28
+ }
29
+ T = T + 1;
30
+ if (T >= 3) { // 1フレーム2投までなので、次のフレームに移る
31
+ F = F + 1;
32
+ T = 1;
33
+ }
34
+ } else {
35
+ /* 10フレームはボーナス加算なしなのでそのまま継続 */
36
+ T = T + 1;
37
+ }
38
+ }
39
+ ```

1

文言修正

2018/04/11 03:31

投稿

tacsheaven
tacsheaven

スコア13707

answer CHANGED
@@ -2,4 +2,4 @@
2
2
  for j in range(1, len(a)-1):
3
3
  if a[j-1] != 0 and a[j] == 10
4
4
  ```
5
- ですから、1投目がストライクだった時、この条件を満たさないので加算されていないのでは。
5
+ ですから、1フレームがストライクだった時、この条件を満たさないので加算されていないのでは。