トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

No.311 z in FizzBuzzString

■■■問題■■■

1〜Nまでの数字について、

●3の倍数かつ5の倍数:FizzBuzz
●3の倍数:Fizz
●5の倍数:Buzz
●それ以外:その数字自体

と変換して、書き並べます。これをFizzBuzzString(N)とします。
では、FizzBuzzString(N)に含まれる'z'の個数を求めて下さい。

■■■入力■■■

N

1行にNが与えられる。 1 <= N <= 10の18乗

■■■出力■■■

求めた'z'の個数を1行に出力して下さい。


C#のソース

using System;
using System.Collections.Generic;

class Program
{
    static string InputPattern = "Input1";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("15");
            //16
            //FizzBuzzString(15)="12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz"
            //であり、この中に含まれる'z'の個数は16個です。
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        long N = long.Parse(InputList[0]);

        Console.WriteLine((N / 3 + N / 5) * 2);
    }
}


解説

3の倍数ならzが2文字
5の倍数ならzが2文字
15の倍数ならzが4文字
であり、15の倍数は、3の倍数かつ5の倍数であるため、
3の倍数の個数*2 + 5の倍数の個数*2 が解になります。