2011-11-08 9 views
2

31から60の間の乱数を生成したいと思います。目的のCで一意の乱数を生成していますか?

私はrand()を使用しましたが、それは私に新しい値を与えなければならない時間が必要な同じvalue.Butを与えると思います。

どうすればいいですか?

+2

は31と60の間に有限の範囲があり、それは確かにいくつかの点で – sidyll

答えて

1

繰り返し値はランダムと一致します。値を繰り返すことができない場合は、可能な値を持つ配列を作成し、空になるまでこの配列から数値をランダムに削除しますが、これは真の乱数よりランダムではありません。

+0

を(あなたが整数を望む考慮して)を繰り返す...または単にアレイをシャッフルします。 – NullUserException

+0

@NullUserExceptionఠ_ఠこれは、すべての値が削除される前に繰り返される結果を可能にします。 – petervaz

1

希望、それが参考になる:

int r = arc4random()%30+30; 
8

使用arc4random()、それは良い乱数を提供し、シーディングを必要としません。

rand()は、独自の値を設定しない限り、アプリが実行されるたびに同じシーケンスを生成します。

次に、問題または範囲を縮小します。簡単な解決策は、範囲の変更と範囲の下限の追加です。 (これは許容されるべきである小さなバイアスの原因となります。)

例:

int rangeLow = 31; 
int rangeHigh = 60; 
int randomNumber = arc4random() % (rangeHigh-rangeLow+1) + rangeLow; 

をあなたはpawan.mangalが良いへのリンクを持っている@範囲内の各数値は一度だけ、その後に発生したい場合溶液。あなたはX-0から1に行くarc4randomから整数値を()を取得するにはarc4random()

を使用することができる代わりに、ランドの

+0

それは魅力のように動作します。 – Gypsa

4

()、あなたはこれを行うだろう:

int value = arc4random() % x; 

へxに範囲1で整数を取得し、ちょうど1追加:

int value = (arc4random() % x) + 1; 

を最後に、あなたは浮動小数点数を生成する必要がある場合は、あなたのプロジェクトでこれを定義します。

#define ARC4RANDOM_MAX  0x100000000' 

その後、あなたはそうのように、0と100の間で、(RAND()を使用しての倍精度で)浮動小数点値を取得するにはarc4random()を使用することができます。

double val = floorf(((double)arc4random()/ARC4RANDOM_MAX) * 100.0f); 
0

思想私は追加することができます私が多くのプロジェクトで使用する方法。

- (NSInteger)randomValueBetween:(NSInteger)min and:(NSInteger)max { 
    return (NSInteger)(min + arc4random_uniform(max + 1); 
} 

私は多くのファイルでそれを使用して終了した場合、私は通常、例えば

#define RAND_FROM_TO(min,max) (min + arc4random_uniform(max + 1)) 

としてマクロを宣言する

NSInteger myInteger = RAND_FROM_TO(31,60) // 31, 32,..., 59, 60 
2

follwing方法は、あなたが、60に31の間の乱数を必要とする低、あなたの質問に言及high.as範囲の固有の乱数の配列を生成しますのでにおける最大29の固有の番号があるでしょうアレイ。

-(void)generateRandomUniqueNumberInRange :(int)rangeLow :(int)rangeHigh{ 
     NSMutableArray *unqArray=[[NSMutableArray alloc] init]; 
     int randNum = arc4random() % (rangeHigh-rangeLow+1) + rangeLow; 
     int counter=0; 
     while (counter<rangeHigh-rangeLow) { 
      if (![unqArray containsObject:[NSNumber numberWithInt:randNum]]) { 
       [unqArray addObject:[NSNumber numberWithInt:randNum]]; 
       counter++; 
      }else{ 
       randNum = arc4random() % (rangeHigh-rangeLow+1) + rangeLow; 
      } 

     } 
     NSLog(@"UNIQUE ARRAY %@",unqArray); 

    } 
関連する問題