我想知道如何在java中编写这个求和方程。但是,诀窍是,我需要总和等于金额。
x= Total Loss Streak amount
sb= Starting Bet
m= multiplier
整个等式将等于一个帐户中的当前货币数量。总和在加总时可以完成的次数需要小于或等于一个帐户中的货币数量。
Fyi,这是一个在peerbet.org上工作的dicebot,我希望能够向用户显示他可以连续多少次没有浪费所有钱。
如果这个问题不好,请不要回答,让我删除它。此外,它认为中间部分是代码,所以我不得不这样说或者它不会让我发布。
答案 0 :(得分:5)
将sb重命名为b。这只是几何级数的总和
在Java中,您可以写:
return b * (m * m - Math.pow(m, x + 1)) / (1 - m);
这比使用循环要快得多,但必须检查m
是否不是1。
如果你希望x
求解给定总和S
,那么公式的重新排列会提供以下Java代码:
double x = Math.log(m * m - S * (1 - m) / b) / log(m) - 1;
并截断此结果以获取x
的整数值,其中下一个整数会破坏播放器。
答案 1 :(得分:4)
int sum = 0;
int x =2;
while(sum<=amount){
sum+=sb*(Math.pow(m,x));
}
return x;
求和实际上只是一个补充for循环吧?
int sum = 0;
for(int i=2; i<x; i++){
sum+=sb*(Math.pow(m,i));
}
return sum;
答案 2 :(得分:2)
我并不完全清楚我正在正确阅读你的公式:你在等于符号的左侧总结从2到x的整数,你想要这个总和来等于右边的术语?
在这种情况下,我们可以进行以下转换:
(请注意,第一步可能不是您的想法。)
我们现在可以使用quadratic formula轻松解决此问题:
假设我们正在计算实数,请注意只为非负参数定义根。获取该根的结果产生非负数,并且从-1
中减去该非负数将产生<= -1
,即负数。将它除以2
也不会使它成为正数,但我们从一开始就假设我们的x必须是>= 2
,否则第一笔总和就没有任何意义
因此,我们可以完全忽略公式中-
的{{1}}个案。因此:
这应该是直接转换为Java代码,但请注意,结果很可能不是整数,因此如果您正在寻找上限,则必须进行舍入。