おかねほしい。

プログラミングとかいろいろ

yukicoder : No.311 z in FizzBuzzString

問題URL:http://yukicoder.me/problems/848/
問題レベル:★


問題
1〜Nまでの数字について、
・3の倍数かつ5の倍数:FizzBuzz
・3の倍数:Fizz
・5の倍数:Buzz
・それ以外:その数字自体
と変換して、その中の「z」の合計を調べる。


解法
ループでFizzまたはBuzzになったときを数えて出力する方法だとTLEになるので、Nを3で割ったときの個数と5で割ったときの個数をそれぞれ2倍して足してやれば良い。
例えば、N=30のとき
3の倍数は、3,6,9,12,15,18,21,24,27,30
5の倍数は、5,10,15,20,25,30
となる。
したがって、Fizzと表示される個数は10個でBuzzと表示される個数は6個となる。
つまり、表示される「z」の合計は10×2+6×2=32である。
足してから2倍してもok。


ソースコード

#include <iostream>
using namespace std;

int main(){
    long long int n;
    cin >> n;
    cout << (n/3*2)+(n/5*2) << endl;
    return 0;
}