B — MooBuzz
题目大意:
农夫约翰的奶牛玩数字游戏“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个数字
题目分析:
直接暴搜会超时。找出规律:
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 <iostream>
#include <cstdio>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给予改进建议!