2434. MooBuzz

2434. MooBuzz

題目描述

Farmer John 的奶牛們最近成爲了一個簡單的數字遊戲“FizzBuzz”的狂熱玩家。這個遊戲的規則很簡單:奶牛們站成一圈,依次從一開始報數,每頭奶牛在輪到她的時候報一個數。如果一頭奶牛將要報的數字是 3 的倍數,她應當報“Fizz”來代替這個數。如果一頭奶牛將要報的數字是 5 的倍數,她應當報“Buzz”來代替這個數。如果一頭奶牛將要報的數字是 15 的倍數,她應當報“FizzBuzz”來代替這個數。於是這個遊戲的開始部分的記錄爲:
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16
由於詞彙的匱乏,奶牛們玩的 FizzBuzz 中用“Moo”代替了 Fizz、Buzz、FizzBuzz。於是奶牛版的遊戲的開始部分的記錄爲:
1, 2, Moo, 4, Moo, Moo, 7, 8, Moo, Moo, 11, Moo, 13, 14, Moo, 16
給定 N(1≤N≤10^9),請求出這個遊戲中第 N 個被報的數。

輸入

輸入包含一個整數 N。

輸出

輸出遊戲中被報出的第 N 個數。

樣例輸入

4

樣例輸出

7

數據範圍限制
測試點 2-5 滿足 N≤10^6。
全部測試點滿足 N≤10^9。

提示
第 4 個被報的數是 7。前 4 個被報的數是 1、2、4、7,因爲我們在奶牛說“Moo”時就會跳過數字。

思路:
先熱一下身,假設這個數是10的倍數就Moo,那麼我們求第18個數(依題意),那麼一年級的小朋友會告訴你,是19。怎麼算出來的呢,問他們去吧!開個玩笑
我們可以發現每10個數,只有Mod10爲0跳過,那麼每十個數就有九個數要喊,所以只需求出第n個數在第幾組(i=n/9)第幾個(j=n%9),這個數=i*10+Mod[j],關於Mod數組,大家自己想想吧。

如果再加一個條件,這個數是3的倍數也Moo。那麼,一年級小朋友的手指就不夠用了。其實就是每十個數中又多出了三個數要Moo,好了,聰明的你一定會發現,依題意每15個數會有7個數Moo,沒了。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e9;
const int mod[9]={-1,1,2,4,7,8,11,13,14};
記得Mod爲0的情況,因爲不能是15的倍數,那最接近的,就是它倍數-1的數。
int t,n,ans;
int main()
{
	//fre(moobuzz);
	scanf("%d",&n);
	t=n/8;ans=t*15;
	ans+=mod[n%8];
	printf("%d",ans);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章