题目: 扔n个骰子,向上面的数字之和为S,给定n,请列出所有可能的S值及相应的概率。
C语言代码:
#include<stdio.h>
#define MAXVALUE 6
int dice(int n){
if(n<1){
return -1;
}
double arr[2][n*MAXVALUE+1];
int flag = 0;
int i;
for(i =1;i<=MAXVALUE;i++){
arr[flag][i]=1.0/6;
}
for(i=MAXVALUE+1;i<=MAXVALUE*n;i++){
arr[flag][i]=0.0;
}
int k,j;
for(k=2;k<=n;k++){
for(i = 0;i<k*MAXVALUE;i++){
arr[1-flag][i]=0.0;
}
for(i = k;i<=MAXVALUE*k;i++){
for(j=1;j<=MAXVALUE&&j<=i;j++){
arr[1-flag][i]+=arr[flag][i-j]/6;
}
}
flag = 1-flag;
}
for(i =n;i<MAXVALUE*n+1;i++){
printf("s = %d,probability = %f\n",i,arr[flag][i]);
}
}
int main(){
int f;
printf("请输入扔的筛子数:");
int n;
scanf("%d",&n);
printf("S所有可能的情况如下:\n");
f=dice(n);
if(f==-1){
printf("失败");
}
return 0;
}
运行结果:
