2020.2.19GDUT寒假训练排位赛1-B

B — MooBuzz 题目大意: 【2020.2.19GDUT寒假训练排位赛1-B】农夫约翰的奶牛玩数字游戏“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≤109),请确定游戏中说出的第N个数字。测试用例2-5满足N≤106
输入
一个正整数N
输出
第N个数字
2020.2.19GDUT寒假训练排位赛1-B
文章图片

题目分析: 直接暴搜会超时。找出规律:
1、2、Moo、4、Moo、Moo、7、8、Moo、Moo、11、Moo、13、14、Moo
16、17、Moo、19、Moo、Moo、22、23、Moo、Moo、26、Moo、28、29、Moo

每15个里就有8个数字,所以只需要看N与8的关系
代码实现:

#include #include using namespace std; int num[8] = {1,2,4,7,8,11,13,14}; int main() { int n; cin >> n; int p = n/8; int q = n%8; if(q==0){ q = 8; p--; } int ans = p*15+num[q-1]; cout << ans << endl; return 0; }

最后希望路过的dl给予改进建议!

    推荐阅读