gpt4 book ai didi

c++ - 嘶嘶声 : Ideal solution

转载 作者:行者123 更新时间:2023-12-01 13:07:39 25 4
gpt4 key购买 nike

所以,Fizz Buzz 是一个非常简单的问题,这个问题有很多解决方案。在最近的一次采访中,面试官让我为 Fizz Buzz 写一个函数,所以我一手想出了以下方法。

void fizz_buzz(int range) {
for(auto i = 1; i < range; ++i) {
if(i % 15 == 0)
cout << "FizzBuzz" << "\n";
else if(i % 3 == 0)
cout << "Fizz" << "\n";
else if(i % 5 == 0)
cout << "Buzz" << "\n";
else
cout << i << "\n";
}
}

然后面试官问我如果我想修改 3 和 7 的 Fizz Buzz 那么在你的代码中多个条件语句将不得不更改。

所以,我写了以下片段:
void fizz_buzz(int range) {
//Notice that we don't need to check for divisibility by both values now
int i = 0;
for(i = 1; i < range; ++i) {
string str;
if(i % 3 == 0)
str += "Fizz";

if(i % 5 == 0)
str += "Buzz";

if(str.empty())
str += to_string(i);

cout << str << " ";
}
}

但是,面试官再次表示他对这种方法也不满意。那么,接近 Fizz Buzz 的理想方式应该是什么?

最佳答案

我认为您不需要整个字符串来检查是否打印了任何内容,单个 bool会做。除此之外,我会收集数组中的数字以便于扩展。除此之外,您的第二个解决方案似乎还不错。这是我的做法:

#include <cstdio>
#include <utility>

void fizzbuzz(int const range) noexcept {
constexpr std::pair<int, char const*> pairs[] {
{3, "Fizz"}, {5, "Buzz"}, {7, "Fuzz"}, {13, "Bizz"}
};

for (int i = 1; i < range; ++i) {
bool none = true;
for (auto const& [num, str] : pairs) {
if (i % num == 0) {
std::printf("%s", str);
none = false;
}
}

if (none) {
std::printf("%d", i);
}
std::putchar('\n');
}
}

关于c++ - 嘶嘶声 : Ideal solution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61686298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com