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 - C

オーソドックスに
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main()
{
    int i;

    for (i = 1; i <= 20; i++) {
        printf("%2d:", i);
        if (i%3 == 0)
            printf("Fizz");
        if (i%5 == 0)
            printf("Buzz");
        if (i%3 != 0 && i%5 != 0)
            printf("hoge");
        puts("");
    }

    return 0;
}

上のやつを、ifなしに変形してみる。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>

int main()
{    
    int i;
    for(i = 1; i <= 20; i++){
        printf("%2d:", i);
        (i%3) || printf("Fizz");
        (i%5) || printf("Buzz");
        (i%3) && (i%5) && printf("hoge");
        printf("\n");
    }

    return 0;
}

1時間ほど考えましたが、これ以上思いつきませんでした☆
1
2
3
4
5
6
7
8
#include<stdio.h>
int main(void){
  char *a[]={"hoge","Fizz","Buzz","FizzBuzz"};
  int i;
  for(i=1;i<=20;i++)
    printf("%2i:%s\n",i,a[!(i%3)+!(i%5)*2]);
  return 0;
}

ども、raynstardです。
普段RSSベースでしか読んでいないので、思ったよりも落ち着いてるなぁと思ったら
実はすでに出尽くして後だったんですね(笑

else無しとした意図は、上から下までなるべく全部通るコードという感じでした。
&& や || でつなげて反対の事かけば
elseと変わらないのは思いつかなかったです^^;;

まぁ、閑話休題、たまにはこういう好き放題遊べるお題も
楽しいかなと思ってみたりするテスト
だから、直書きとかももちろんOKです!
むしろもっとはじけていただいてもいっこうに(笑

ちなみに、これは直接出力するパターンですな
できれば!= を外したかったのですが思いつかなかったですorz
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main(int argc, char *argv[])
{
  int N=0;
  for(N=1; N<=20; N++)
  {
    printf("%2d:%-s\r", N, "hoge");
    if( (N%3) == 0 ) printf("%2d:%-s", N, "Fizz");
    if( (N%5) == 0 )
    {
      if( (N%3) != 0 ) printf("%2d:", N);
      printf("%-s","Buzz");
    }
    printf("\n");
  }
  return 0;
}

Index

Feed

Other

Link

Pathtraq

loading...