Fizz Buzz问题

给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:

  • 如果这个数被3整除,打印fizz.

  • 如果这个数被5整除,打印buzz.

  • 如果这个数能同时被35整除,打印fizz buzz.

要求:只用一个if判断

static List<string> Cal(int n)
{
    List<string> res = new List<string>();
    string[] temp = { "fizz", "fizz buzz", "buzz" };

    for (int i = 1; i <= n; i++)
    {
        if (i % 3 != 0 && i % 5 != 0)
        {
            res.Add(i.ToString());
        }
        else
        {
            int a = i % 3;
            int b = i % 5;

            int off = a - b;
            //映射(-1-0),(0,1),(1,2)
            int index = Math.Sign(off / (double)int.MaxValue) + 1;

            res.Add(temp[index]);
        }
    }

    return res;
}

我想的办法就是排除不是3和5倍数的数,然后将是3和5倍数的数通过一个映射计算到数组的下标,得到对应的字符串。

这里使用了Math.Sign不知道是不是取巧了,刚好这个函数是返回-1,0,1的,估计函数里面也有判断的,估计不是这样解的哈


首页 我的博客
粤ICP备17103704号