gpt4 book ai didi

algorithm - 是否可以仅使用 2 个检查来编写 fizzbuzz?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:46 26 4
gpt4 key购买 nike

显而易见的解决方案是这样的:

if (x % 15 == 0) println("fizzbuzz");
else if (x % 3 == 0) println ("fizz");
else if (x % 5 == 0) println ("buzz");

那么你可以说诀窍是连接 fizz 和 buzz:

if (x % 3 == 0) print("fizz");
if (x % 5 == 0) print("buzz");
if (x % 15 == 0) println();

print("%s%s%s", x % 3 == 0 ? "fizz" : "", x % 5 == 0 ? "buzz" : "", x % 15 == 0 ? "\r\n" : "");

所以问题是换行符,在上述所有情况下我们都执行 3 次检查。

假设在“fizz”或“buzz”之后需要换行,如何仅使用 2 个检查就可以完成?

最佳答案

没有支票怎么样?

string[] output = { "fizzbuzz", "", "", "fizz", "", "buzz", "fizz", "", "", "fizz", "buzz", "", "fizz", "", "" };
print("%s", output[x % 15]);

请注意,这当然只会从 代码中删除if 语句。底层代码很可能包含一两条跳转指令。

如果您想更清楚地了解正在发生的事情,您可以创建两个数组:

string[] fizz = { "fizz", "", "" };
string[] buzz = { "buzz", "", "", "", "" };
print("%s%s", fizz[x % 3], buzz[x % 5]);

请注意,这两种实现都不会处理负数,这是一个可以处理负数的版本:

string[] fizz = { "fizz", "", "" };
string[] buzz = { "buzz", "", "", "", "" };
print("%s%s", fizz[((x % 3) + 3) % 3], buzz[((x % 5) + 5) % 5]);

请注意,我巧妙地跳过了您在代码中添加的换行符。如果你想要,我相信你可以弄清楚如何以相同的方式修改上面的代码来添加它:)

更重要的是:请注意,这实际上没有通过“官方”fizzbuzz 测试,它只是回答了您的问题。

fizzbuzz 测试是这样的:

  • 写出从 1 到 100 的所有数字,除了是 3 的倍数的数字你应该而不是数字写出“fizz”,对于 5 的倍数你应该而不是数字写出“buzz”。如果一个数字同时是 3 和 5 的倍数,写出“fizzbuzz”而不是数字。

由于您的问题没有以任何方式处理“代替数字”部分,因此我的回答也没有。

那么,如果我们跳过循环通常需要“检查”这一事实,我们是否可以在没有 if 语句的情况下编写整个 fizzbuzz 测试?

有一点魔法,是的,我们可以,这是 C# 代码中的循环,您可以使用 LINQPad 验证它或 Ideone :

void Main()
{
string[] fizzbuzz = new[]
{
"fizzbuzz", "{0}", "{0}", "fizz", "{0}", "buzz", "fizz",
"{0}", "{0}", "fizz", "buzz", "{0}", "fizz", "{0}", "{0}"
};
for (int index = 1; index <= 100; index++)
{
Debug.WriteLine(string.Format(fizzbuzz[index % 15], index));
}
}

这里我依赖于这样一个事实,即发送到 string.Format 的格式字符串实际上不必包含对参数的任何引用。

编辑:如评论中所述,我使用?? 获取中的"{0}" string.Format 参数并将数组中的条目保留为 null,但 ?? 确实是伪装的 if 语句,因此将其编辑掉。

关于algorithm - 是否可以仅使用 2 个检查来编写 fizzbuzz?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17502946/

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