ここから本文です

#include <stdio.h>

アバター

ID非公開さん

2019/8/2407:48:34

#include <stdio.h>

int main(void) {
for (int i = 1; i <= 100; i++)
{

if (i % 3 == 0 && i % 5 == 0) {
//条件はi % 3 == 0 を満たさずにi % 5 == 0 を満たすときに行う処理を書く
printf("FizzBuzz\n");
}
else if (i % 3 == 0) {
// 条件はi % 3 == 0 を満たしたときに行う処理を書く
printf("Fizz\n");
}
else if (i % 5 == 0) {
// 条件はi % 3 == 0 を満たさずにi % 5 == 0 を満たすときに行う処理を書く
printf("Buzz\n");
}
else{
printf("%d\n", i);
}

}
return 0;
}
のプログラムはなぜ3の倍数、5の倍数の時から書いておらず、3×5の倍数の時から書いているのに正しく動くのでしょうか?
プログラムは順番に処理されるため最初から3の倍数、5の倍数の時から処理しないといけないのではないでしょうか?

閲覧数:
106
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

nac_tnkさん

2019/8/2408:53:36

> if (i % 3 == 0 && i % 5 == 0) {
> //条件はi % 3 == 0 を満たさずにi % 5 == 0 を満たすときに行う処理を書く
> printf("FizzBuzz\n");
> }

この部分のコメントが違います。
「i%3==0 と i%5==0 の両者を満たす時に行う処理」、です。
日本語で言えば、
「3でも割り切れて、5でも割り切れる時」=「15で割り切れる時」
を意味します。

で、順序は面倒な処理にならないように(処理を軽くする為に)そうしています。
つまり、Fizz→Buzz→BuzzFizzの順にしようとすると下記のようになります。

if(i%3==0 && i%5!=0)printf("Fizz\n");
else if(i%5==0 && i%3!=0)printf("Buzz\n");
else if(i%15==0)printf("FizzBuzz\n");
else printf("%d\n",i);

これよりも、下記の順にした方が、処理時間の短縮は明らかです。
上記が「いけない」という事ではなく、下記の方が推奨されます

if(i%15==0)printf("FizzBuzz\n");
else if(i%3==0)printf("Fizz\n");
else if(i%5==0)printf("Buzz\n");
else printf("%d\n",i);

  • アバター

    質問者

    ID非公開さん

    2019/8/2820:19:36

    ありがとうございます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜1件/1件中

meigr01さん

2019/8/2414:07:54

#include <stdio.h>

int main(void) {
for (int i = 1; i <= 100; i++)
{

if (i % 3 == 0 && i % 5 == 0) {
//条件はi % 3 == 0 を満たしi % 5 == 0 を満たすときに行う処理を書く
printf("FizzBuzz\n");
}
else if (i % 3 == 0) {
// 条件はi % 3 == 0 のみ満たしたときに行う処理を書く
printf("Fizz\n");
}
else if (i % 5 == 0) {
// 条件はi % 3 == 0 を満たさずにi % 5 == 0 を満たすときに行う処理を書く
printf("Buzz\n");
}
else{
printf("%d\n", i);
}

}
return 0;
}

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる