3

今日は面接でした。この質問は、以下のコードを最適化することでした。for ループの後に以下のコードが表示される場合、「if-else」の 4 つのステップが続きます。それで、インタビュアーは私にそれを3つのif-else行に最適化するように頼んだ。私はたくさん試しました。しかし、解決策を見つけることができませんでした。スクリプト言語を知っていれば、それらも使用できると彼は私に言いました。同じものを最適化するのを手伝ってください。

int main()
{
    int i = 1;
    for(i; i <= 100; i++)
    {
        if((i % 3 == 0 && i % 5 == 0))
        {cout << "PR\n";}
        else if(i % 3 == 0)
        {cout << "P\n";}
        else if(i % 5 == 0)
        {cout << "R\n";}
        else
        {cout << i <<"\n";}
    }
system("pause");
return 0;
}
4

5 に答える 5

4

これはよく知られた質問です...「FizzBu​​zz」。

明示的なIFなしで解決することもできます

const char *messages[] = {"%i\n", "P\n", "R\n", "PR\n"};

for (i=1; i<=100; i++) {
    printf(messages[((i % 3)==0) + 2*((i % 5)==0))], i);
}
于 2013-09-04T16:14:01.123 に答える
0

この方法では、次の場合にのみ 3 を使用します

#include <iostream>
using namespace std;

int main()
{
 for (int i = 0; i <= 100; ++i)
 {
   bool fizz = (i % 3) == 0;
   bool buzz = (i % 5) == 0;
   if (fizz)
    cout << "Fizz";
   if (buzz)
    cout << "Buzz";
    if (!fizz && !buzz)
     cout << i;
    cout << endl;
  }
  return 0;
}
于 2014-10-07T07:39:19.393 に答える