gpt4 book ai didi

c++ - 比许多嵌套的 `for` 循环更好的东西?

转载 作者:行者123 更新时间:2023-12-04 14:29:10 26 4
gpt4 key购买 nike

我想评估游戏的几种不同的潜在规则/评分系统。游戏涉及最多掷三个骰子三次。为了考虑每种可能性的结果,我正在迭代九种可能掷骰子中每一种的所有可能值。
我的问题是以下蛮力风格编码是否是最好的方法。

// get the result for each possible game
void Evaluate( const ScoringSystem& sys )
{
for( int d1=0; d1<6; ++d1 )
{
for( int d2=0; d2<6; ++d2 )
{
for( int d3=0; d3<6; ++d3 )
{
for( int d4=0; d4<6; ++d4 )
{
for( int d5=0; d5<6; ++d5 )
{
for( int d6=0; d6<6; ++d6 )
{
for( int d7=0; d7<6; ++d7 )
{
for( int d8=0; d8<6; ++d8 )
{
for( int d9=0; d9<6; ++d9 )
{
int rolls[] = { d1, d2, d3, d4, d5, d6, d7, d8, d9 };

// get the result for this particular game
sys.GetGameResult( rolls );
}
}
}
}
}
}
}
}
}
}
代码可以运行,但很丑陋,不能扩展到具有更多骰子的游戏。我有一个支持 C++17 的环境,所以我对更新的想法持开放态度——只要它们不会让代码看起来太糟糕。
(切线:6^9 超过 1000 万。我可能最好使用伪随机数并且只是“滚动”九个骰子一百万次。但我仍然想知道是否有一种巧妙的方法来处理排列。)

最佳答案

如果您发现嵌套的循环看起来几乎相同,则应考虑使用递归。

void generateDiceRolls(const ScoringSystem& sys, std::vector<int>& rolls, size_t index)
{
if (index == rolls.size())
{
// Reached the end - all the dice have been rolled
sys.GetGameResult(rolls);
}
else
{
// For each value of a die at this index, generate dice rolls for the rest of them
for (int i = 0; i < 6; i++)
{
rolls[index] = i;
generateDiceRolls(sys, rolls, index + 1);
}
}
}
void Evaluate(const ScoringSystem& sys)
{
std::vector<int> rolls(9); // Change 9 to however many dice you want to use
generateDiceRolls(sys, rolls, 0);
}

关于c++ - 比许多嵌套的 `for` 循环更好的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69089153/

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