#include <stdio.h>
void histogram(const int dice, const int faces){
int N[dice];
for (int i = 0; i < dice; i++) { N[i] = 1; }
int C[dice * faces + 1];
for (int i = 0; i < dice * faces + 1; i++) { C[i] = 0; }
int T = 0;
while (1) {
int sum = 0;
for (int i=0; i<dice; i++) {
sum += N[i];
}
C[sum]++;
N[0]++;
T++;
int idx = 0;
while (N[idx] > faces) {
N[idx] = 1;
idx++;
if (idx == dice) { goto finish; }
N[idx]++;
}
}
finish:
printf("ダイス:%d 面数:%d\n", dice
, faces
); for (int i=0; i<dice * faces + 1; i++) {
if (C[i]) {
printf("出目:%d 出現回数:%d 出現率:%.2f\n", i
, C
[i
], (double)C
[i
]/(double)T
* 100.0); }
}
}
int main(void) {
histogram(3, 6);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIGhpc3RvZ3JhbShjb25zdCBpbnQgZGljZSwgY29uc3QgaW50IGZhY2VzKXsKICAgIGludCBOW2RpY2VdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWNlOyBpKyspIHsgTltpXSA9IDE7IH0KICAgIGludCBDW2RpY2UgKiBmYWNlcyArIDFdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWNlICogZmFjZXMgKyAxOyBpKyspIHsgQ1tpXSA9IDA7IH0KICAgIGludCBUID0gMDsKICAgIAogICAgd2hpbGUgKDEpIHsKICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICBmb3IgKGludCBpPTA7IGk8ZGljZTsgaSsrKSB7CiAgICAgICAgICAgIHN1bSArPSBOW2ldOwogICAgICAgIH0KICAgICAgICBDW3N1bV0rKzsKICAgICAgICBOWzBdKys7CiAgICAgICAgVCsrOwogICAgICAgIAogICAgICAgIGludCBpZHggPSAwOwogICAgICAgIHdoaWxlIChOW2lkeF0gPiBmYWNlcykgewogICAgICAgICAgICBOW2lkeF0gPSAxOwogICAgICAgICAgICBpZHgrKzsKICAgICAgICAgICAgaWYgKGlkeCA9PSBkaWNlKSB7IGdvdG8gZmluaXNoOyB9CiAgICAgICAgICAgIE5baWR4XSsrOwogICAgICAgIH0KICAgIH0KICAgIApmaW5pc2g6CiAgICBwcmludGYoIuODgOOCpOOCuTolZCDpnaLmlbA6JWRcbiIsIGRpY2UsIGZhY2VzKTsKICAgIGZvciAoaW50IGk9MDsgaTxkaWNlICogZmFjZXMgKyAxOyBpKyspIHsKICAgICAgICBpZiAoQ1tpXSkgewogICAgICAgICAgICBwcmludGYoIuWHuuebrjolZCDlh7rnj77lm57mlbA6JWQg5Ye654++546HOiUuMmZcbiIsIGksIENbaV0sIChkb3VibGUpQ1tpXS8oZG91YmxlKVQgKiAxMDAuMCk7CiAgICAgICAgfQogICAgfQogICAgcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbih2b2lkKSB7CgloaXN0b2dyYW0oMywgNik7CglyZXR1cm4gMDsKfQo=