プログラム
test.c
# include <stdio.h>
# include <stdlib.h>
# define MAXDATA 10000
void shuffle(int array[], int size)
{
int i = size;
while (i > 1) {
int j = rand() % i;
i--;
int t = array[i];
array[i] = array[j];
array[j] = t;
}
}
int main()
{
int values[MAXDATA];
int m;
int i;
for (m = 0; m < MAXDATA; m++){
values[m] = m + 1;
}
int size = sizeof(values) / sizeof(int);
shuffle(values, size);
FILE *fp;
fp = fopen("test.txt", "a");
if (fp == NULL){
perror("ファイルの読み込みに失敗");
return 1;
}
for (i = 0; i < size; i++){
fprintf(fp, "%d\n", values[i]);
}
fclose(fp);
return 0;
}
説明
- shuffle関数・・・重複しないように配列要素をシャッフル
- main関数・・・shuffle関数で扱ったデータをただのテキストファイルに出力しているだけ
その他
- もっといろいろ改良していく
- 重複しない数値の生成は難しいと勝手に思っていたが、こんな簡単な方法があったとは(Fisher-Yatesというアルゴリズムらしいです)