06|FizzBuzz
還沒完成C 或 C++ 皆可CPU 時間上限 1 秒
相關主題: C 基礎速查
C 或 C++ 皆可|CPU 時間上限 1 秒
從 1 數到 n,每個數字輸出一行,但是:
- 如果是 3 的倍數,而且也是 5 的倍數,輸出
FizzBuzz - 如果只是 3 的倍數,輸出
Fizz - 如果只是 5 的倍數,輸出
Buzz - 其他情況,輸出數字本身
一行,一個整數 n(1 ≤ n ≤ 100,000)。
輸出 n 行,第 i 行是依照上面的規則對數字 i 的輸出(i 從 1 到 n)。Fizz、Buzz、FizzBuzz 的大小寫要和題目一樣。
輸入:
15輸出:
12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzzfor迴圈:for (int i = 1; i <= n; i++),注意起點是 1、終點要包含 n%判斷倍數:i % 3 == 0表示 i 是 3 的倍數if/else if/else:只會執行第一個成立的條件,所以順序很重要- C++:大量輸出時用
"\n"換行,不要用std::endl。std::endl除了換行,還會強制把緩衝區的內容寫出去(flush),每一行都這樣做會很慢
提示 1:為什麼 15 印成了 Fizz?
15 是 3 的倍數,也是 5 的倍數。如果你的程式先判斷 i % 3 == 0,條件成立後就印 Fizz,後面的 else if 都不會執行了。
把「同時是 3 和 5 的倍數」這個最嚴格的條件放在最前面。
提示 2:「同時是 3 和 5 的倍數」怎麼寫?
可以寫成 i % 3 == 0 && i % 5 == 0。因為 3 和 5 沒有共同的因數,這等於「是 15 的倍數」,所以也可以寫成 i % 15 == 0。
提示 3:C++ 輸出 10 萬行有點慢?
- 換行用
"\n"或'\n',不要用std::endl - 在 main 的開頭加上這兩行,可以讓
cin、cout快很多:
std::ios::sync_with_stdio(false);std::cin.tie(nullptr);加了之後,就不要在同一個程式裡混用 printf / scanf 和 cout / cin。