天天看点

洛谷P5834 MooBuzz S

题目描述

Farmer John 的奶牛们最近成为了一个简单的数字游戏“FizzBuzz”的狂热玩家。这个游戏的规则很简单:奶牛们站成一圈,依次从一开始报数,每头奶牛在轮到她的时候报一个数。如果一头奶牛将要报的数字是 33 的倍数,她应当报 

Fizz

 来代替这个数。如果一头奶牛将要报的数字是 55 的倍数,她应当报 

Buzz

 来代替这个数。如果一头奶牛将要报的数字是 1515 的倍数,她应当报 

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

给定 NN,请求出这个游戏中第 NN 个被报的数。

输入格式

输入包含一个整数 NN。

输出格式

输出游戏中被报出的第 NN 个数。

输入输出样例

输入 #1复制

4      

输出 #1复制

7      

说明/提示

关于部分分:

测试点 11 为样例。

测试点 2\sim 52∼5 满足 N\le 10^6N≤106。

对于 100\%100% 的数据,1 \leq N \leq 10^91≤N≤109

供题:Brian Dean

上代码:

#include <iostream>
#include <cstdio>

using namespace std;
typedef long long ll;

bool check(ll x) {
	if (x%3==0) return false;
	if (x%5==0) return false;
	return true;
}
int main() {
	ll k; scanf("%lld",&k);
	ll res=15LL*(k/8)-1; k&=7;
	while (k) {
		if (check(++res)) --k;
	}
	printf("%d", res);
	return 0;
}
           

继续阅读