さらにいまさら感がありますが……。
正直、解くだけならどの辺が難しいのか、よくわからなかったりします。最初はやってみる気は全然なかったんですが。
で、いろんな方の回答を見てたんですが、そこで思ったこと。
3 で剰余とって、5 でも剰余とってるのに、なんでまたもう一度 15 で剰余とってるんだ?
この辺まとめられんもんかと。一つの数字あたり、比較は二回でできるはずじゃないかと。
ちょっと考えてみたんですが、3 や 5 で割り切れるときに数字に『加えて』 Fizz や Buzz を出すのなら簡単なんですよ。単に文字列連結すれば良いだけなんだから。どちらかで割り切れる、その時だけ数字を『置き換える』必要がある。だから七面倒くさいな、と。
だからといって、剰余計算の代わりに、フラグとか文字列チェックが新たに入っても意味がない。
で、書いたのが以下の C# のコード。
static void Main(string[] args)
{
for (int i = 1 ; i <= 100; i++)
if (i % 3 == 0)
{
Console.Write("Fizz");
if (i % 5 == 0)
Console.Write("Buzz");
Console.WriteLine();
}
else if (i % 5 == 0)
Console.WriteLine("Buzz");
else
Console.WriteLine(i.ToString());
}
書いてみれば、べつにどうということはないコードかな、と。
剰余計算に基づく比較が3箇所ありますが、必ずどちらかに分岐するので、1ループあたりは2回の比較で済むはず。
#まあそれが実行性能に影響を与えるかっつうと、この程度のループでは関係しないので自己満足なんだけど。
んで、問題確認のために、えぴさんの こんなんでモチベーション上がんのかよ を確認に行くと、
なるほど、その手は考えつかんかった
と納得。何で見逃してるかなー。
で、思ったのは、モチベーションって、「何をつくるか」が問題じゃなくて、「どういう目的意識を『自分で持てるか』」、なんじゃないかなー、という、ある意味あたりまえのお話なのでした。
以上、まる