たなしょのメモ

日々勉強していることをつらつらと

C++に挑戦してみよう。アルゴリズム編 ランダム 8日目

コード

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int maxof(const int a[], int n)
{
int i;
int max = a[0];

for(i = 1; i < n; i++){
if(a[i] > max){
max = a[i];
}
}

return max;
}

int main(void)
{
int number;
int i;
int *height;

srand(time(NULL));
do{
number = rand() % 100;
}while(number < 5 || number > 20);
printf("人数:%d\n", number);
 
height = calloc(number, sizeof(int));

for(i = 0; i < number; i++){
height[i] = 100 + rand() % 90;
printf("height[%d] = %d\n", i, height[i]);
}

printf("最大値は%dです。\n", maxof(height, number));

free(height);

return 0;
}

所感

c言語での乱数の作成は動き的にランダムではないらしく、ある程度法則があるらしい。なので

srand(time(NULL));
 でsrand()に現在の時刻を突っ込み、値を逐一変更する。
ちなみにsrand(50)等にすると起動時に毎回同じ値を生成するようになり全く乱数ではなくなる。「乱数を生成する準備のために乱数が必要」っておかしな話だな。
ちなみに頑張ったのは、
do{
number = rand() % 100;
}while(number < 5 || number > 20);
numberが5〜20でなければもう一回やりなおしてランダムな数字を生成する。