challenge 変形Fizz-Buzz問題

どもraynstardです。
どちらにしようか迷いましたが発想の元ネタがUIさんの投稿からなので
こちらに投稿してみます。
--------------
以下の仕様を満たす文字列を
20行出力するプログラムを作成してください。

1. 1行の出力は「<行番号> ':' <メッセージ>」であること。
2. 行番号が 3の倍数であるとき、メッセージは「Fizz」であること
3. 行番号が 5の倍数であるとき、メッセージは「Buzz」であること
4. 行番号が 3の倍数かつ5の倍数であるとき、メッセージは「FizzBuzz」であること
5. 上記に記した条件以外のメッセージについては「hoge」であること
6. 条件分岐する場合、if文のみが使用でき、
   かつ、論理式が成立した場合の処理のみが記述できます。
#アセンブリなどifがなければif以外でもかまわないです。(意味が同じならば)

というわけでこの問題はFizz-Buzz問題をelseなしならどう書く?という問題です。

出力例:
 1:hoge
 2:hoge
 3:Fizz
 4:hoge
 5:Buzz
 6:Fizz
 7:hoge
 8:hoge
 9:Fizz
10:Buzz
11:hoge
12:Fizz
13:hoge
14:hoge
15:FizzBuzz
16:hoge
17:hoge
18:Fizz
19:hoge
20:Buzz

Posted feedbacks - COBOL

勉強を兼ねてCOBOLで書いてみました。
ループのスキップ方法が分からなくてIF-ELSEネストになっています。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
       IDENTIFICATION DIVISION.
       PROGRAM-ID. FIZZ-BUZZ.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 I PIC 9(2) VALUE 0.
       01 DIV PIC 9(2) VALUE 0.
       01 REM PIC 9(2) VALUE 0.
       01 EDIT PIC Z9.
       PROCEDURE DIVISION.
       PERFORM VARYING I FROM 1 BY 1 UNTIL I > 20
         DIVIDE I BY 15 GIVING DIV REMAINDER REM
         IF REM = 0 THEN
           MOVE I TO EDIT
           DISPLAY EDIT ":FizzBuzz"
         ELSE
           DIVIDE I BY 3 GIVING DIV REMAINDER REM
           IF REM = 0 THEN
             MOVE I TO EDIT
             DISPLAY EDIT ":Fizz"
           ELSE
             DIVIDE I BY 5 GIVING DIV REMAINDER REM
             IF REM = 0 THEN
               MOVE I TO EDIT
              DISPLAY EDIT ":Buzz"
            ELSE
              MOVE I TO EDIT
              DISPLAY EDIT ":hoge"
            END-IF
          END-IF
        END-IF
      END-PERFORM
      STOP RUN.

お題の一部が飛んでしまっていました。すみません。書き直してみました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
       IDENTIFICATION DIVISION.
       PROGRAM-ID. FIZZ-BUZZ.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 I PIC 9(2) VALUE 0.
       01 DIV PIC 9(2) VALUE 0.
       01 REM PIC 9(2) VALUE 0.
       01 EDIT PIC Z9.
       01 SKIP PIC 9 VALUE 0.
       PROCEDURE DIVISION.
       PERFORM VARYING I FROM 1 BY 1 UNTIL I > 20
         DIVIDE I BY 15 GIVING DIV REMAINDER REM
         IF REM = 0 THEN
           MOVE I TO EDIT
           DISPLAY EDIT ":FizzBuzz"
           MOVE 1 TO SKIP
         END-IF
         DIVIDE I BY 3 GIVING DIV REMAINDER REM
         IF REM = 0 AND SKIP = 0 THEN
           MOVE I TO EDIT
           DISPLAY EDIT ":Fizz"
           MOVE 1 TO SKIP
         END-IF
         DIVIDE I BY 5 GIVING DIV REMAINDER REM
         IF REM = 0 AND SKIP = 0 THEN
           MOVE I TO EDIT
           DISPLAY EDIT ":Buzz"
           MOVE 1 TO SKIP
         END-IF
         IF SKIP = 0 THEN
           MOVE I TO EDIT
           DISPLAY EDIT ":hoge"
         END-IF
         MOVE 0 TO SKIP
       END-PERFORM
       STOP RUN.

Index

Feed

Other

Link

Pathtraq

loading...