C/C++の宿題を片付けます 95代目

このエントリーをはてなブックマークに追加
534513
検証コード
ratio[x][y] は x 回目のシャッフルが終わった時に数値 n が y 番目に入っている確率
但し ratio[0][0-9]=0.0, ratio[0][n-1]=1.0; とする
#include<stdio.h>
#define NUM_MAX 10
void disp_ratio(double ratio[], int n){
double sum=0.0;
int i;
for(i=0;i<n;i++){printf("%.3f ", ratio[i]);sum+=ratio[i];}
printf("sum=%.3f\n", sum);
}
int main(void){
double ratio[NUM_MAX+1][NUM_MAX];
int i, j, k, l;
for(l=0;l<NUM_MAX;l++){
for(i=0;i<NUM_MAX;i++) ratio[0][i]=0.0;
ratio[0][l]=1.0;
for(i=0;i<NUM_MAX;i++){
for(j=0;j<NUM_MAX;j++){
if(i==j){
ratio[i+1][j]=0.0;
for(k=0;k<NUM_MAX;k++) ratio[i+1][j]+=ratio[i][k]/NUM_MAX;
}else{
ratio[i+1][j]=ratio[i][j]*(NUM_MAX-1)/NUM_MAX+ratio[i][i]/NUM_MAX;
}
}
}
for(i=0;i<NUM_MAX+1;i++) disp_ratio(ratio[i], NUM_MAX);
printf("\n");
}
return 0;
}