目錄
1 問題描述
問題描述
生成n個∈[a,b]的隨機整數,輸出它們的和為x的概率。
輸入格式
一行輸入四個整數依次為n,a,b,x,用空格分隔。
輸出格式
輸出一行包含一個小數位和為x的概率,小數點后保留四位小數
樣例輸入
2 1 3 4
樣例輸出
0.3333
數據規模和約定
對於50%的數據,n≤5.
對於100%的數據,n≤100,b≤100.
對於100%的數據,n≤100,b≤100.
2 解決方案
下面代碼在系統中運行評分為90分,第五組數據無法通過,我用同版本的C代碼運行(PS:具體參見文末參考資料),卻可以通過,具體無法通過的原因,有可能是下面代碼原因,如有同學Java版代碼能夠通過,還望分享一下代碼哦~
具體代碼如下:
import java.util.Scanner; public class Main { public static int n, a, b, x; public void getResult() { double[][] dp = new double[n + 1][x + 1]; for(int j = a;j <= b;j++) dp[1][j] = 1.0 / (b - a + 1); for(int i = 2;i <= n;i++) { for(int k = a;k <= b;k++) { for(int j = a;j <= x;j++) { if(j - k >= 0) dp[i][j] += dp[i - 1][j - k] / (b - a + 1); } } } System.out.printf("%.4f",dp[n][x]); } public static void main(String[] args) { Main test = new Main(); Scanner in = new Scanner(System.in); n = in.nextInt(); a = in.nextInt(); b = in.nextInt(); x = in.nextInt(); test.getResult(); } }
參考資料:
1. 算法提高 概率計算