整数を入力して、3の倍数ならば「Fizz」、5の倍数ならば「Buzz」、15の倍数ならば「Fizz Buzz」と表示するプログラム。 このプログラムのやり方を教えてください!

ベストアンサー

0

ThanksImg質問者からのお礼コメント

ありがとうございます!

お礼日時:5/16 0:57

その他の回答(5件)

0

整数を入力する 15の倍数ならば「Fizz Buzz」と表示する else 3の倍数ならば「Fizz」と表示する else 5の倍数ならば「Buzz」と表示する

0

はじめにアルゴリズムを考える。 ・15は3の倍数でもあり、5の倍数でもあり15の倍数でもある。このとき出力するメッセージはどうするか? Fizz Buzz FizzBuzzと表示するかFizzBuzzのみと表示するか? 題意からすると Fizz Buzz FizzBuzzと表示するのが良いような気がする。 「余談」 プログラミングで飯を食っていくときは仕様が曖昧なときはクライアントに確認し文書で残す。後からいや〜〜そうじゃないと 言われると大損し、痛い目にあう。 ・どういう計算(処理)順序にすれば無駄がないか? たとえば、C言語で説明すると (N % 3) == 0 && (N %5) == 0 と (N % 15) == 0 は同じ意味だがどちらのほうが良いか? (N % 15) == 0のほうが良い。たぶん、アッセンブリ言語に展開したときこちらのほうがステップ数が少ない。なので、メモリは少なくなるし、処理速度も早くなる。 Nの倍数とはその数で割り切れること。余りが0ということ。 大概のプログラミング言語には 剰余(じょうよ 余りのこと)を求める演算子が用意されている。 if(n % 15 == 0){ printf("Fizz Buzz FizzBuzz"); } else if( n % 3 == 0 ){ // n % 5 を先にしても同じ printf("Fizz"); } else if(n % 5 == 0){ printf("Buzz"); }

0

switchを使うやり方は色々ありますがどれも読みにくいのでお薦めしません。 #define _CRT_SECURE_NO_WARNINGS // Visual Studio only #include <stdio.h> int main(void) {     int n;     printf("整数 > ");     scanf("%d", &n);     switch ((n%3 == 0 ? 3 : 1) * (n%5 == 0 ? 5 : 1)) {         default:                        break;         case  3: printf("Fizz\n"     ); break;         case  5: printf("Buzz\n"     ); break;         case 15: printf("Fizz Buzz\n"); break;     }     switch (((n%3 == 0)*2+1) * ((n%5 == 0)*4+1)) {         default:                        break;         case  3: printf("Fizz\n"     ); break;         case  5: printf("Buzz\n"     ); break;         case 15: printf("Fizz Buzz\n"); break;     }     switch (!(n%3) + !(n%5)*2) {         default:                        break;         case  1: printf("Fizz\n"     ); break;         case  2: printf("Buzz\n"     ); break;         case  3: printf("Fizz Buzz\n"); break;     } } // 説明 C言語では式を評価したとき0以外なら真、0なら偽とします。 また真の値を1、偽の値を0で表します。 1. (n%3 == 0 ? 3 : 1) 条件演算子?:を使っています。 <<--- X ? Y : Z Xが真ならYを返し、Xが偽ならZを返します. --->> %は余りを返す演算子です。 nが3の倍数のときは余りは0なのでn%3の値は0。 0 == 0は真となり、 (0 == 0 ? 3 : 1)の値は3です。 nが3の倍数でないときは余りは1か2なのでn%3の値は1か2。 1 == 0または2 == 0は偽となり、 (1 == 0 ? 3 : 1)または(2 == 0 ? 3 : 1)の値は1です。 後の計算はわかると思います。 (n%3 == 0 ? 3 : 1)の3という数値はcase 3:というように 分かりやすくするために選びました。 区別できればいいので何でもいいです。 2. (!(n%3) + !(n%5)*2)の!(n%3)について !は論理否定演算子です。 <<--- !X Xが真なら!Xの値は0で、Xが偽なら!Xの値は1です。 --->> nが3の倍数のときは余りは0なのでn%3の値は0。 すなわち偽となり !(n%3)の値は1です。 nが3の倍数でないときは余りは1か2なのでn%3の値は1か2。 すなわち真となり !(n%3)の値は0です。 後の計算はわかると思います。

1

#include <stdio.h> void main() { int num; scanf("%d",&num); if(!(num % 3)){ printf("Fizz"); } if(!(num % 15)){ printf(" "); } if(!(num % 5)){ printf("Buzz"); } }

1人がナイス!しています