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

回答編集履歴

1

追記1

2021/09/03 10:32

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -83,4 +83,161 @@
83
83
 
84
84
  的な処理になるかと。
85
85
 
86
- そうすれば重複している部分( 2のときは 1の時の「Aランク突破」が重複しているし ) を省くことができますよ。
86
+ そうすれば重複している部分( 2のときは 1の時の「Aランク突破」が重複しているし ) を省くことができますよ。
87
+
88
+ -----------
89
+
90
+ [追記1]
91
+
92
+ ※ ご指摘を受けての追記です。
93
+
94
+ 上記でやっているフォールスルーをやる場合は、規則性を見付ける必要があります。
95
+
96
+ 1~4は、「下位ランクも含まれている」ため、あえてbreakを省きます。
97
+
98
+ まずは、上記で述べたように1の場合,2の場合,... のそれぞれの「到達するランク」を列挙してみてください。
99
+
100
+ おそらく、以下のようになるはずです。
101
+
102
+ ```
103
+ 1: A, B, C, D, E
104
+ 2: B, C, D, E
105
+ 3: C, D, E
106
+ 4: D, E
107
+ 5: E
108
+ その他: <ランク無し>
109
+ ```
110
+
111
+ 1~4は 下位ランクも含んでいますね。
112
+
113
+ つまり、1は 2のやつを含んでいて、2のやつは 3のやつを含んでいて、...という感じです。
114
+
115
+ ちょっと考えを変えてみると、3の場合は、 <5> + <4> + <3> となっていますね。
116
+
117
+ よって、疑似コードで書くと、
118
+
119
+ ```
120
+ SWITCH( 対象 ):
121
+ 1の場合:
122
+ 「Aランク」
123
+ 2の場合:
124
+ 「Bランク」
125
+ 3の場合:
126
+ 「Cランク」
127
+ 4の場合:
128
+ 「Dランク」
129
+ 5の場合:
130
+ 「Eランク」
131
+ BREAK
132
+ その他:
133
+ 「該当なし」系
134
+ ```
135
+
136
+ となるはずです。
137
+
138
+ 上記疑似コードを使ってシミュレーションしてみましょう。
139
+
140
+ たとえば、X = 1 の場合。
141
+
142
+ ```
143
+ 1. まず SWICH(...) で調べる
144
+ 2. 「1の場合」を見る
145
+ 3. 「Aランク」が該当する
146
+ 4. breakが無いので「2の場合」も見る
147
+ 5. 「Bランク」も該当する
148
+ 6. breakが無いので「3の場合」も見る
149
+ 7. 「Cランク」も該当する
150
+ ...
151
+ 10. breakが無いので「5の場合」を見る
152
+ 11. 「Eランク」も該当する
153
+ 12. breakがあるのでSWITCHから抜ける
154
+ ```
155
+
156
+ となり、
157
+
158
+ ```
159
+ Aランク到達
160
+ Bランク到達
161
+ Cランク到達
162
+ Dランク到達
163
+ Eランク到達
164
+ ```
165
+
166
+ となります。
167
+
168
+ X = 2 の場合も、
169
+
170
+ ```
171
+ 1. まずSWITCH(...)で調べる
172
+ 2. 「1の場合」を見る
173
+ 3. (→ 条件を満たさないため スルー)
174
+ 4. 「2の場合」を見る
175
+ 5. 「Bランク」に該当
176
+ 6. breakが無いため 「3の場合」を見る
177
+ 7. 「Cランク」も該当
178
+ ...
179
+ 12. breakがあるのでSWITCHから抜ける
180
+ ```
181
+
182
+ となり、
183
+
184
+ ```
185
+ Bランク該当
186
+ Cランク該当
187
+ Dランク該当
188
+ Eランク該当
189
+ ```
190
+
191
+ となる。
192
+
193
+ X = 5 のときは、
194
+
195
+ ```
196
+ 1. まずSWITCH(...)で調べる
197
+ 2. 「1の場合」を見る
198
+ 3. (→ 条件を満たさないため スルー)
199
+ 4. 「2の場合」を見る
200
+ 5. (→ 条件を満たさないため スルー)
201
+ 6. breakが無いため 「3の場合」を見る
202
+ 7. (→ 条件を満たさないため スルー)
203
+ ...
204
+ 10. breakが無いので「5の場合」を見る
205
+ 11. 「Eランク」も該当する
206
+ 12. breakがあるのでSWITCHから抜ける
207
+ ```
208
+
209
+ となり、
210
+
211
+ ```
212
+ Eランク該当
213
+ ```
214
+
215
+ のみとなる。
216
+
217
+ で、X が 1~5以外の数字の場合は、上記の(1)~(12)は完全スルーして、
218
+
219
+ ```
220
+ 1. まずSWITCH(...)で調べる
221
+ 2. 「1の場合」を見る
222
+ 3. (→ 条件を満たさないため スルー)
223
+ 4. 「2の場合」を見る
224
+ 5. (→ 条件を満たさないため スルー)
225
+ 6. breakが無いため 「3の場合」を見る
226
+ 7. (→ 条件を満たさないため スルー)
227
+ ...
228
+ 13. 上記の条件すべてに満たさないため defaultに
229
+ 14. よって「該当無し」とする
230
+ ```
231
+
232
+ となり、
233
+
234
+ ```
235
+ 該当なし
236
+ ```
237
+
238
+ 的なものになるはずです。
239
+
240
+ switch...caseは上からチェックしていき、該当するものがあれば、breakが出るか、最後までと到達するまで処理するようなので、今回の X が 1~4 までは break無しで処理をして、
241
+ 5 で 処理をした直後にbreakを置く。
242
+
243
+ となるはずです。