You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ FizzBuzz实现中vector push_back()元素被覆盖问题排查

问题分析与解决

嘿,这个问题其实一眼就能看穿——你在条件判断的时候用错变量啦!

核心错误

你代码里的条件判断用的是输入参数n,而不是循环里的当前数字i:

// 你的错误判断(误用了n)
if (n % 15 == 0) os.push_back("FizzBuzz");
else if (n % 3 == 0) os.push_back("Fizz");
else if (n % 5 == 0) os.push_back("Buzz");

而FizzBuzz的核心逻辑,是要对循环中的每个i(从1到n的每一个数字)做判断,就像你给出的正确代码那样:

// 正确的判断(用循环变量i)
if(i%3==0 && i%5==0) ans.push_back("FizzBuzz");
else if(i%3==0) ans.push_back("Fizz");
else if(i%5==0) ans.push_back("Buzz");

为什么会出现“所有元素被覆盖”的现象

  • 当n=15时,n%15==0是永远成立的,所以循环的每一次都会执行push_back("FizzBuzz"),最终容器里全是这个字符串;
  • 当n=3时,n%3==0永远成立,所以每次都添加"Fizz";
  • 当n=4时,n%15、n%3、n%5都不成立,所以每次都会执行push_back(to_string(i)),这时候看起来结果是对的,但完全是巧合——比如你测试n=5的话,你的代码会输出全["Buzz"],这就明显不对了。

修正后的代码

只需要把条件里的n全部换成i就可以正常运行了:

class Solution {
public:
    vector<string> fizzBuzz(int n) {
        vector<string> os;
        for (int i = 1; i <= n; i++) {
            if (i % 15 == 0) os.push_back("FizzBuzz");
            else if (i % 3 == 0) os.push_back("Fizz");
            else if (i % 5 == 0) os.push_back("Buzz");
            else os.push_back(to_string(i));
        }
        return os;
    }
};

内容的提问来源于stack exchange,提问作者Nimitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 00:33:14