1から10までの数字をランダムに並べ替える

 1から10までの数字をランダムに並べ替えるプログラムを作ってみました。単純にrand()関数を使えば簡単に出来そうな感じがしますが、完全にランダムにしてしまうと同じ数字が出てきてしまう可能性がありますので、そのあたりちょっと工夫しました。

 内容は以下↓

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

int main(){
	int index[10];
	int array[10];
	int i,n;
	
	srand((unsigned)time(NULL));
	
	for(i=0;i<10;i++){
		index[i] = 0;
	}
	
	for(i=0;i<10;i++){
		while(1){
			n = rand()%10;
			if(index[n] == 0){
				array[i] = n + 1;
				index[n] = 1;
				break;
			}
		}
	}
	
	for(i=0;i<10;i++){
		printf("%d\n",array[i]);
	}
	
	return 0;
}

 rand()で作った数字を既に使っているか(Array配列に含まれているか)を調べるために、indexという配列を作っています。indexの要素をすべて0で初期化し、例えば6という数字をArray配列に入れるときにはindex[6]に1を代入します。こうしておけば、再び6が出てきてもindex[6]の値を調べれば、すでにつかわれていることが分かるというわけです。