1

範囲から乱数を生成する非常に基本的な乱数関数があります。

すなわち:

// The random is seeded earlier on in the applicationDidFinishLaunching() function
-(NSUInteger)makeRandomNumber:(NSUInteger)minNumber to:(NSUInteger)maxNumber
{
 //NSUInteger i = (NSUInteger)( (random() / (double)RAND_MAX) * y);

 NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 return i;
}

この関数にオプションのモジュラス演算を追加して、何かのモジュラスである数値のみを返すようにします。

ランダムな人々の賃金を生成するためにこれを行いたいと思っています.5または0で丸めた賃金の方がはるかに読みやすいことがわかりました.

オプションのパラメーターを作成する方法や、オプションのモジュラス値が見つかるまでランダム化を強制的にループさせる方法がわかりません。

もう 1 つの問題は、検出するモジュラスがない場合、ループが永遠に続く場合があることです。

すなわち;

0 から 100 の間でランダム化し、モジュラス 5 の値を返します。

編集:これは、最小値または最大値に関係なく、任意の範囲で機能するはずです。上記の数値はほんの一例です。

4

3 に答える 3

3

ITYMは 5の倍数です。この例では、0 から 20 の間のランダムな値を生成し、これに 5 を掛けます。

于 2010-06-24T12:11:00.517 に答える
-1

roundNumber整数除算は、除算で小数を切り捨て、乗算で元の丸められた数値を復元するため、数値が の倍数であることを確認します。

// The random is seeded earlier on in the applicationDidFinishLaunching() function
-(NSUInteger)makeRandomNumber:(NSUInteger)minNumber to:(NSUInteger)maxNumber round:(NSUInteger) roundNumber
{   
 NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 return (i / roundNumber) * roundNumber;
}
于 2010-06-24T13:35:33.087 に答える
-1

ループは十分に機能すると思います:

 NSUInteger i = 0;
 do {
   NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 } while(i % 5 != 0);
于 2010-06-24T12:12:16.037 に答える