程序员的天堂的阶梯,没有逃脱的fizz buzz。在任何地方的采访中都会出现,这也是学习一门新语言时写的一个有用的小任务。这样做的额外好处是可能会改变您看待问题的方式。
我常用的 c# 解决方案非常简单。
public static string fizzbuzz(int num)
{
var divby3 = num % 3 == 0;
var divby5 = num % 5 == 0;
string word;
if (divby3 && divby5)
{
word = "fizzbuzz";
}
else if (divby3)
{
word = "fizz";
}
else if (divby5)
{
word = "buzz";
}
else
{
word = num.tostring();
}
return word;
}
public static void main(string[] args)
{
for(var i=1; i
<p>直到我用 c 语言写了这个,我才意识到这种方法是多么浪费。 c 中的内存管理是手动处理的,因此问题所在立即显而易见。在 c# 代码中,我们为每次调用 fizzbuzz 创建一个字符串。这是在循环中发生的,因此我们快速分配几个字符串。然而,每个在循环中仅使用一次。之后我们必须等待垃圾收集器注意到这一点并回收字符串使用的内存。</p>
<p>在 c 中,我决定将缓冲区传递给函数。每次通过循环,我们都会清除缓冲区,写入它,然后打印出来。调用者需要做更多的工作,但我们的内存使用效率更高。<br></p>
<pre class="brush:php;toolbar:false">void fizzBuzz(int num, char *buf)
{
bool isFizz = num % 3 == 0;
bool isBuzz = num % 5 == 0;
if (isFizz && isBuzz)
{
sprintf(buf, "%s", "FizzBuzz");
}
else if(isFizz)
{
sprintf(buf, "%s", "Fizz");
}
else if(isBuzz)
{
sprintf(buf, "%s", "Buzz");
}
else
{
sprintf(buf, "%d", num);
}
}
int main()
{
const size_t BUF_MAX = 128;
char *buf = (char *)malloc(sizeof(char) * BUF_MAX);
for (int i=1; i
<p>花时间用其他语言编写即使是简单的东西也可以改变我们的观点。</p>