トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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 が解になります。