gpt4 book ai didi

c# - 剪刀布石头算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:33 24 4
gpt4 key购买 nike

我正在使用以下有效的方法,但想知道是否有更好的算法来执行测试。有更好的方法吗?在 C# 中执行此操作但抛开语法不谈,相信该算法在 OOP 语言中是相同的。谢谢。

public String play(int userInput)
{ //ComputerIn is a randomly generated number between 1-3
ComputerIn = computerInput();

if (ComputerIn == userInput)
return "Draw";

else if (ComputerIn == 1 && userInput == 2)
return "Win";

else if (ComputerIn == 2 && userInput == 3)
return "Win";

else if (ComputerIn == 3 && userInput == 1)
return "Win";

else if (ComputerIn == 1 && userInput == 3)
return "Lose";

else if (ComputerIn == 2 && userInput == 1)
return "Lose";

else
return "Lose";
}

最佳答案

if ((ComputerIn) % 3 + 1 == userInput)
return "Win";
else if ((userInput) % 3 + 1 == ComputerIn)
return "Lose"
else
return "Draw"

如果将 3 绕到 1(使用 %),那么赢家总是比输家大 1。

当您使用 0-2 时,这种方法更自然,在这种情况下,我们将使用 (ComputerIn+1)%3。我通过将 ComputerIn 替换为 ComputerIn-1 并将 UserInput 替换为 UserInput-1 并简化了我的答案表达。

编辑,好久才看这个问题。正如所写,如果 ComputerIn 没有在其他任何地方使用,而仅用于确定输赢,那么该方法实际上等同于:

if (ComputerIn == 1)
return "Win";
else if (ComputerIn == 2)
return "Lose"
else
return "Draw"

这甚至可以进一步简化为

return new String[]{"Win", "Lose", "Draw"}[ComputerIn-1];

由此产生的结果完全无法区分。除非随机生成的数字暴露在这个方法之外。不管你的输入是什么,所有的可能性总是有 1/3 的几率。也就是说,您所要求的只是一种以等概率返回“赢”、“输”或“平”的复杂方法。

关于c# - 剪刀布石头算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20271325/

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