產生不重複的亂數 (使用陣列)

亂數產生10組數字(1~10),不可以重複

第一個方法是紀錄輸入的數字到陣列,然後每次都要比對陣列中每一個儲存的數字是否出現過。
這裡的n是從幾個數字來看(可無範圍限制),亂數出69就紀錄69在當時i為多少的n[i]陣列裡面。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
srand(time(0));
int i,j,n[10]={0};
for(i=1;i<=10;++i){
do{
n[i-1]=rand()%10+1;
for(j=1;j<i;++j){
if(n[i-1]==n[j-1]){
break;
}
}
}while(j!=i);
printf("第%2d號: %2d\n",i,n[i-1]);
}
return 0;
}

第二個方式是用counter陣列來計算每一個號碼出現過幾次,此試題條件僅能出現一次,所以概念是要為計數器要為0才可以使用。(建表法)
這裡的n是以數值範圍來看,1~1000的話,就需要有1000個counter。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
srand(time(0));
int i,n,counter[10]={0};
for(i=1;i<=10;++i){
do{
n=rand()%10+1;
}while(counter[n-1]!=0);
printf("%d ",n);
counter[n-1]++;
}
return 0;
}

留言