lint 9.不使用if的fizzbuzz

如何不用if去做fizzbuzz这一题

思路:使得这个数与3,5运算得到的结果a, b,通过不同的运算分别得到0,1,2,3这四个数,然后以这个结果为下标,去输出四种不同的结果。

对于下面的式子

a = c e i l ( ( f l o a t ) ( i % 3 ) / 5 ) a = ceil((float)(i\%3)/5) a=ceil((float)(i%3)/5)

i i i=4带入后运算得到 a = 1 a=1 a=1,取 i i i=21运算得到 a = 0 a=0 a=0,即结果输出为0代表 i i i是3的倍数,为1代表 i i i不是3的倍数。

对于下面的式子

b = c e i l ( ( f l o a t ) ( i % 5 ) / 5 ) b = ceil((float)(i\%5)/5) b=ceil((float)(i%5)/5) 是将上式里的 i % 3 i\%3 i%3改成 i % 5 i\%5 i%5,那么同样可以通过运算得出结论,

如果 i i i是5的倍数则得到 b = 0 b=0 b=0,否则得到 b = 1 b=1 b=1

这样对于一个数 i , a + b i,a+b ia+b得出的值有三种可能,0,1,2

0 代表 既能被3整除,又能被5整除
1 代表 能被3整除或者能被5整除
2 代表 都不能

到这一步我们大概的任务就完成了,下面就是区分为结果为1的两种情况了

这个容易,直接在上面两个的公式的任意一个前面加上一个系数就行了,如下

b = 2 ∗ c e i l ( ( f l o a t ) ( i % 5 ) / 5 ) b = 2*ceil((float)(i\%5)/5) b=2ceil((float)(i%5)/5)

这样的话,就有如下结论

0 代表 既能被3整除,又能被5整除  fizzbuzz
1 代表 只能被5整除   buzz
2 代表 只能被3整除   fizz
3 代表 都不能   

代码如下

class Solution {
public:
    /**
     * @param n: An integer
     * @return: A list of strings.
     */
    vector<string> fizzBuzz(int n) {
        vector<string> res_judge(4);
        res_judge[0] = "fizz buzz";
        res_judge[1] = "buzz";
        res_judge[2] = "fizz";
        res_judge[3] = "";
        vector<string> res(n);
        for(int j=0;j<n;j++){
            int i = j+1;
            res_judge[3] = to_string(i);
            int dive3 = ceil((float)(i%3)/5)*1;
            int dive5 = ceil((float)(i%5)/5)*2;
            int count_div = dive3+dive5;
            res[j] = res_judge[count_div];
        }
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值