我正在分析以下关于彩票赔率的代码,我有2个问题:
-
为什么我们需要首先将lotteryOdds的值设置为1(另外,这是这种类型计算中的常见情况吗?)
-
我知道计算概率的公式(n*(n-1)…(n-k+1)/(1*2…*k),但如果有人向我解释它是如何工作的,按照重复"for";循环,我很感激。
import java.util.Scanner; public class LotteryOdds { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println(" How many numbers do you need to draw? "); int k = in.nextInt(); System.out.println(" what is the highest numbers you can do draw? "); int n = in.nextInt(); int lotteryOdds = 1; for (int i = 1; i <= k; i++) { lotteryOdds = lotteryOdds * (n - i + 1) / i; System.out.println("Your odds are 1 in " + lotteryOdds + " . Good luck!"); } }
}
lotteryOdds
变量需要为1,因为如果您执行0 *某项操作,您将始终获得0,因此程序将始终返回0。至于循环,让我们改变值并通过循环:第一次迭代:
lotteryOdds = 1 * (n - 1 + 1)/1 = n/1
第二个迭代:
lotteryOdds = n * ((n - 2 + 1)/2) = (n/1) * ((n - 1)/2) = n *((n - 1)/2) = (n * (n - 1))/(1 * 2)
等。所以当你概括它的时候,你会得到(n * (n - 1)…(n - k + 1)/(1 * 2…* k)就像上面的公式一样