博客
关于我
LintCode 第一题fizz buzz
阅读量:791 次
发布时间:2023-01-31

本文共 1266 字,大约阅读时间需要 4 分钟。


我看到这个问题,是要根据给定的整数n,从1到n依次打印每个数。具体的规则是:

  • 如果这个数能被3整除,打印“fizz”;
  • 如果这个数能被5整除,打印“buzz”;
  • 如果这个数能同时被3和5整除,打印“fizz buzz”。

我看到之前的C++代码有一些问题。首先,循环变量i被设定为n,这样循环只会执行一次,导致结果中的数字总是n。其次,条件判断中没有正确使用优先级,可能会导致错误的结果。最后,使用向量的push_back方法有误,直接将int型的n加入向量,这会导致输出不正确。

在修改代码之前,我需要先理清这些问题并逐步解决它们。我会从头开始分析每一步骤,确保每一步都正确无误。

首先,循环变量i应该从1开始,循环到n结束。然后,针对每个i,判断它是否能被3和5整除,根据条件输出相应的字样。如果一个数同时被3和5整除,才会输出“fizz buzz”;只被其中一个整除则输出该单词;否则,输出这个数本身。

在C++中,条件表达式的优先级是从高到低排列的。因此,在进行多个条件判断时,不需要显式地使用括号,编译器会自动处理。不过,为了避免不必要的歧义,我可以添加括号,使条件代码更容易阅读和理解。

在向量中存储结果时,每次都使用push_back方法,将结果作为string类型添加进去。由于i是整数,需要先将它转换为字符串。C++中的to_string函数可以实现这一功能。

在测试代码的时候,我会先用一个小的n值来验证结果是否正确。例如,当n=15的时候,结果应该是:["1", "2", "fizz", "4", "buzz", "fizz", "7", "8", "fizz", "buzz", "11", "fizz", "13", "14", "fizz buzz"].

通过这种方式,我可以确保修改后的代码能够正确处理不同的情况,并且代码的结构也更加清晰。


最终代码如下:

#include 
using namespace std;vector
fizzBuzz(int n) { vector
results; for (int i = 1; i <= n; i++) { if (i % 15 == 0) { results.push_back("fizz buzz"); } else if (i % 5 == 0) { results.push_back("buzz"); } else if (i % 3 == 0) { results.push_back("fizz"); } else { results.push_back(to_string(i)); } } return results;}

这样一算,应该就能正确实现题目的要求了。

转载地址:http://guwfk.baihongyu.com/

你可能感兴趣的文章