我对算法有疑问。我有一个名为computer_strategy_decider的函数,它需要6个骰子(数字)并确定要保留的骰子和重新滚动的骰子。
您可能需要考虑功能说明和评分部分:
computer_strategy_decider() –此函数将决定使用哪种评分策略。在 总结,计算机将始终保持安全,并具有非常简单的策略。电脑 始终会选择能给她最高分的策略(请参阅得分部分)。它会 检查所有策略,并确定哪个策略会给她最高分。例如,如果 骰子如下所示:1,2,3,4,5,6那么就不需要检查其他策略了 得分为1500。如果得分如下1、1、1、5、5、5,则计算机将保留前三个 并滚动最后三个,因为这会给她1000分,而不是保持5,5,5 会给她500。
计分规则:
- 每5点可得50分。
- 每1点可得100分。
- 一次进行一次三分一掷的价值相当于单个骰子面值的100倍。 (例如。, 三个三的价值200,三个三个的价值300,三个四个的价值400,三个 5个的价值500,三个6的价值600),除了3个价值500 1000(注意:它们不必连续)。
- 六个类别(例如4 4 4 4 4 4,5、5、5、5、5、5,...)的总价值为1000分。
- 直线(1、2、3、4、5、6)的总价值为1500点(不需要按此顺序),因为 例如3、2、1、6、5、4)。
还:
掷骰子时,只能使用上述之一进行评分。取决于 保留的骰子数量,其中一项策略是得分。例如,如果用户滚动“ 1 1 1 1 1 1”,他们决定保留其中的1个,其余的再滚动一次,他们将获得100分。如果 他们决定保留其中的3个,然后再滚动其他3个,他们将获得1000分。如果他们 决定保留全部,那么他们将获得1000分。请参阅“ computer_strategy_decider” 下面的功能定义,说明计算机将如何决定使用哪种策略。
我希望在解决此问题方面有所帮助,以便能够编写此函数来解决我的问题。
int computer_stategy_decider(int csd_d1 , int csd_d2 ,int csd_d3 ,int csd_d4 ,int csd_d5 , int csd_d6){
int csd_result;
if(csd_d1+csd_d2+csd_d3+csd_d4+csd_d5+csd_d6==21){
csd_result=1500;
printf("I stop and Kept dices 1 2 3 4 5 6\nMy score: %d",csd_result);
}
else if(){}
我能想到的唯一想法是,将所有情况下无法使用的骰子加起来,只有6种。 111-111 | 222-222 | 333-333 | 444-444 | 555-555 | 666-666和123-456。