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

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 
#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给予改进建议!

你可能感兴趣的:(2020.2.19GDUT寒假训练排位赛1-B)