回答編集履歴

1

追記1

2021/09/03 10:32

投稿

BeatStar
BeatStar

スコア4958

test CHANGED
@@ -169,3 +169,317 @@
169
169
 
170
170
 
171
171
  そうすれば重複している部分( 2のときは 1の時の「Aランク突破」が重複しているし ) を省くことができますよ。
172
+
173
+
174
+
175
+ -----------
176
+
177
+
178
+
179
+ [追記1]
180
+
181
+
182
+
183
+ ※ ご指摘を受けての追記です。
184
+
185
+
186
+
187
+ 上記でやっているフォールスルーをやる場合は、規則性を見付ける必要があります。
188
+
189
+
190
+
191
+ 1~4は、「下位ランクも含まれている」ため、あえてbreakを省きます。
192
+
193
+
194
+
195
+ まずは、上記で述べたように1の場合,2の場合,... のそれぞれの「到達するランク」を列挙してみてください。
196
+
197
+
198
+
199
+ おそらく、以下のようになるはずです。
200
+
201
+
202
+
203
+ ```
204
+
205
+ 1: A, B, C, D, E
206
+
207
+ 2: B, C, D, E
208
+
209
+ 3: C, D, E
210
+
211
+ 4: D, E
212
+
213
+ 5: E
214
+
215
+ その他: <ランク無し>
216
+
217
+ ```
218
+
219
+
220
+
221
+ 1~4は 下位ランクも含んでいますね。
222
+
223
+
224
+
225
+ つまり、1は 2のやつを含んでいて、2のやつは 3のやつを含んでいて、...という感じです。
226
+
227
+
228
+
229
+ ちょっと考えを変えてみると、3の場合は、 <5> + <4> + <3> となっていますね。
230
+
231
+
232
+
233
+ よって、疑似コードで書くと、
234
+
235
+
236
+
237
+ ```
238
+
239
+ SWITCH( 対象 ):
240
+
241
+ 1の場合:
242
+
243
+ 「Aランク」
244
+
245
+ 2の場合:
246
+
247
+ 「Bランク」
248
+
249
+ 3の場合:
250
+
251
+ 「Cランク」
252
+
253
+ 4の場合:
254
+
255
+ 「Dランク」
256
+
257
+ 5の場合:
258
+
259
+ 「Eランク」
260
+
261
+ BREAK
262
+
263
+ その他:
264
+
265
+ 「該当なし」系
266
+
267
+ ```
268
+
269
+
270
+
271
+ となるはずです。
272
+
273
+
274
+
275
+ 上記疑似コードを使ってシミュレーションしてみましょう。
276
+
277
+
278
+
279
+ たとえば、X = 1 の場合。
280
+
281
+
282
+
283
+ ```
284
+
285
+ 1. まず SWICH(...) で調べる
286
+
287
+ 2. 「1の場合」を見る
288
+
289
+ 3. 「Aランク」が該当する
290
+
291
+ 4. breakが無いので「2の場合」も見る
292
+
293
+ 5. 「Bランク」も該当する
294
+
295
+ 6. breakが無いので「3の場合」も見る
296
+
297
+ 7. 「Cランク」も該当する
298
+
299
+ ...
300
+
301
+ 10. breakが無いので「5の場合」を見る
302
+
303
+ 11. 「Eランク」も該当する
304
+
305
+ 12. breakがあるのでSWITCHから抜ける
306
+
307
+ ```
308
+
309
+
310
+
311
+ となり、
312
+
313
+
314
+
315
+ ```
316
+
317
+ Aランク到達
318
+
319
+ Bランク到達
320
+
321
+ Cランク到達
322
+
323
+ Dランク到達
324
+
325
+ Eランク到達
326
+
327
+ ```
328
+
329
+
330
+
331
+ となります。
332
+
333
+
334
+
335
+ X = 2 の場合も、
336
+
337
+
338
+
339
+ ```
340
+
341
+ 1. まずSWITCH(...)で調べる
342
+
343
+ 2. 「1の場合」を見る
344
+
345
+ 3. (→ 条件を満たさないため スルー)
346
+
347
+ 4. 「2の場合」を見る
348
+
349
+ 5. 「Bランク」に該当
350
+
351
+ 6. breakが無いため 「3の場合」を見る
352
+
353
+ 7. 「Cランク」も該当
354
+
355
+ ...
356
+
357
+ 12. breakがあるのでSWITCHから抜ける
358
+
359
+ ```
360
+
361
+
362
+
363
+ となり、
364
+
365
+
366
+
367
+ ```
368
+
369
+ Bランク該当
370
+
371
+ Cランク該当
372
+
373
+ Dランク該当
374
+
375
+ Eランク該当
376
+
377
+ ```
378
+
379
+
380
+
381
+ となる。
382
+
383
+
384
+
385
+ X = 5 のときは、
386
+
387
+
388
+
389
+ ```
390
+
391
+ 1. まずSWITCH(...)で調べる
392
+
393
+ 2. 「1の場合」を見る
394
+
395
+ 3. (→ 条件を満たさないため スルー)
396
+
397
+ 4. 「2の場合」を見る
398
+
399
+ 5. (→ 条件を満たさないため スルー)
400
+
401
+ 6. breakが無いため 「3の場合」を見る
402
+
403
+ 7. (→ 条件を満たさないため スルー)
404
+
405
+ ...
406
+
407
+ 10. breakが無いので「5の場合」を見る
408
+
409
+ 11. 「Eランク」も該当する
410
+
411
+ 12. breakがあるのでSWITCHから抜ける
412
+
413
+ ```
414
+
415
+
416
+
417
+ となり、
418
+
419
+
420
+
421
+ ```
422
+
423
+ Eランク該当
424
+
425
+ ```
426
+
427
+
428
+
429
+ のみとなる。
430
+
431
+
432
+
433
+ で、X が 1~5以外の数字の場合は、上記の(1)~(12)は完全スルーして、
434
+
435
+
436
+
437
+ ```
438
+
439
+ 1. まずSWITCH(...)で調べる
440
+
441
+ 2. 「1の場合」を見る
442
+
443
+ 3. (→ 条件を満たさないため スルー)
444
+
445
+ 4. 「2の場合」を見る
446
+
447
+ 5. (→ 条件を満たさないため スルー)
448
+
449
+ 6. breakが無いため 「3の場合」を見る
450
+
451
+ 7. (→ 条件を満たさないため スルー)
452
+
453
+ ...
454
+
455
+ 13. 上記の条件すべてに満たさないため defaultに
456
+
457
+ 14. よって「該当無し」とする
458
+
459
+ ```
460
+
461
+
462
+
463
+ となり、
464
+
465
+
466
+
467
+ ```
468
+
469
+ 該当なし
470
+
471
+ ```
472
+
473
+
474
+
475
+ 的なものになるはずです。
476
+
477
+
478
+
479
+ switch...caseは上からチェックしていき、該当するものがあれば、breakが出るか、最後までと到達するまで処理するようなので、今回の X が 1~4 までは break無しで処理をして、
480
+
481
+ 5 で 処理をした直後にbreakを置く。
482
+
483
+
484
+
485
+ となるはずです。