問題
疑問があるコード
Java
1import java.util.Scanner; 2public class Main{ 3 public static void main(String[] args){ 4 Scanner sc = new Scanner(System.in); 5 int n=sc.nextInt(); 6 long d = sc.nextLong(); 7 int[] p={2,3,5}; 8 int[] co=new int[3]; 9 for(int i=0; i<3; i++){ 10 while(d%p[i]==0){ 11 co[i]++; //2の数、3の数、4の数を数えている 12 d/=p[i]; //2,3,4で割っている 13 } 14 } 15 if(d>1){ 16 System.out.println(0); //7以上の素数があると確率は0 17 return; 18 } 19 double[][][][] dp=new double[n+1][co[0]+1][co[1]+1][co[2]+1]; //[ふる数+1][2の数+1][3の数+1][5の数+1] 20 dp[0][0][0][0]=1; //最初は確率1 21 for(int i=0; i<n; i++){ 22 for(int j=0; j<=co[0]; j++){ 23 for(int k=0; k<=co[1]; k++){ 24 for(int t=0; t<=co[2]; t++){ 25 dp[i+1][Math.min(j+1,co[0])][k][t]+=dp[i][j][k][t]*(1.0/6.0); 26 dp[i+1][j][Math.min(co[1],k+1)][t]+=dp[i][j][k][t]*(1.0/6.0); 27 dp[i+1][j][k][Math.min(co[2],t+1)]+=dp[i][j][k][t]*(1.0/6.0); 28 dp[i+1][j][k][t]+=dp[i][j][k][t]*(1.0/6.0); 29 dp[i+1][Math.min(co[0],j+2)][k][t]+=dp[i][j][k][t]*(1.0/6.0); 30 dp[i+1][Math.min(co[0],j+1)][Math.min(co[1],k+1)][t]+=dp[i][j][k][t]*(1.0/6.0); 31 } 32 } 33 } 34 } 35 System.out.println(dp[n][co[0]][co[1]][co[2]]); 36 } 37} 38
質問内容
上記のコードで以下の部分は何をしているのかが分からないので教えていただきたいです。
右側にコメントしてあるのは私がこういうことではないかと考えたものなので間違えているところがあれば教えていただけると幸いです。
Java
1 for(int i=0; i<n; i++){ 2 for(int j=0; j<=co[0]; j++){ 3 for(int k=0; k<=co[1]; k++){ 4 for(int t=0; t<=co[2]; t++){ 5 dp[i+1][Math.min(j+1,co[0])][k][t]+=dp[i][j][k][t]*(1.0/6.0); 6 dp[i+1][j][Math.min(co[1],k+1)][t]+=dp[i][j][k][t]*(1.0/6.0); 7 dp[i+1][j][k][Math.min(co[2],t+1)]+=dp[i][j][k][t]*(1.0/6.0); 8 dp[i+1][j][k][t]+=dp[i][j][k][t]*(1.0/6.0); 9 dp[i+1][Math.min(co[0],j+2)][k][t]+=dp[i][j][k][t]*(1.0/6.0); 10 dp[i+1][Math.min(co[0],j+1)][Math.min(co[1],k+1)][t]+=dp[i][j][k][t]*(1.0/6.0); 11 } 12 } 13 } 14 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/18 11:17