出于好奇,我编写了一个程序来计算产生特定得分的Ski Ball角色的不同组合数量。孔有值[0、10、20、30、40、50、100],这些值被视为枚举值。还有九个球的投掷机会。我将每次投掷处理为递归调用下一次投掷,并在循环遍历每次投掷的值时进行处理:
private static void scoreCalc(int targetScore, int score, int ballNumber)
{
for(SkiBallHoles hole : SkiBallHoles.values())
{
score += hole.getValue();
ballNumber--;
if (ballNumber > 0) {
scoreCalc(targetScore, score, ballNumber);
}
if (ballNumber == 0 && score == targetScore) {
frequency++;
}
ballNumber++;
score -= hole.getValue();
}
}
这些得分会从主函数中的for循环中被传递到一系列的设置函数中,供该函数使用:
while(score <= 900){
writer.println(calculateFrequency(score));
score += 10;
}
private static String calculateFrequency(int targetScore)
{
frequency = 0;
scoreCalc(targetScore);
return targetScore + ": " + frequency;
}
private static void scoreCalc(int targetScore)
{
scoreCalc(targetScore, 0, BALLCOUNT);
}
这种方法的问题在于它没有计算唯一解的数量。例如,0 0 0 0 0 0 0 0 10和10 0 0 0 0 0 0 0 0被算作是不同的组合来产生一个分数,但实际上它们是相同的组合。
我该如何修改我的方法来仅计算唯一解?
谢谢 =)
public enum SkiBallHoles { Hole0 (0), Hole10 (10), Hole20 (20), Hole30 (30), Hole40 (40), Hole50 (50), Hole100 (100); private final int value; SkiBallHoles (int value) { this.value = value; } public int getValue() { return value; } }
- jojo008startIndex
,并仅从该索引迭代数组。当您递归调用函数时,请使用startIndex = ballNumber
调用它。 - omer681