// cs162_422.c
#include <stdio.h>
#include <stdlib.h>

// dummy Random
double Random(double m, double s)
{
    return 123.456 * (double) rand() / ((double) RAND_MAX + 1.0);
}

// main
int main(void)
{
    int i, n;
    unsigned seed;
    double mu, siguma, *array;

    int j, length;
    double max, min;
    const double max_width = 57.0;  // 一番長い所の桁数
    const char mark = '*';      // ヒストグラムに使う文字

    // input & setting
    printf("乱数系列(x): ");
    scanf("%u", &seed);
    printf("個数: ");
    scanf("%d", &n);
    printf("平均(μ): ");
    scanf("%lf", &mu);
    printf("分散(σ): ");
    scanf("%lf", &siguma);
    srand(seed);
    if ((array = (double *) malloc(sizeof(double) * n)) == NULL) {
        exit(1);
    }

    // show
    printf("\n乱数表\n\n");
    for (i = 0; i < n; i++) {
        array[i] = Random(mu, siguma);
        if (i == 0) {
            max = min = array[0];
        } else {
            if (max < array[i]) {
                max = array[i];
            }
            if (min > array[i]) {
                min = array[i];
            }
        }
    }
    for (i = 0; i < n; i++) {
        printf("[%3d] %10.5f ", i + 1, array[i]);
        length = (int) (max_width * array[i] / max);
        for (j = 0; j < length; j++) {
            printf("%c", mark);
        }
        for (; j < max_width; j++) {
            printf(" ");
        }
        printf("|%s\n", max == array[i] ? " MAX" : (min == array[i] ? " min" : ""));
    }

    // end
    if (array) {
        free(array);
        array = NULL;
    }
    return 0;
}