0

乱数を生成するためにarc4randomを使用しています。1〜9の数字を生成したいと思います。0を除外するにはどうすればよいですか?

int r = arc4random() % (9);
    NSLog(@"Random Number: %d",r);
4

4 に答える 4

15

int r = (arc4random() % 8) + 1

于 2011-04-06T02:52:21.633 に答える
5

arc4random_uniform()のように、を使用できます

arc4random_uniform(9) + 1

一般に、との間の数値を生成するにはlohi次を使用します。

arc4random_uniform(hi - lo + 1) + lo

を使用せずarc4random_uniform()、固執したい場合arc4random()は、モジュラス式を使用した結果の値が均一に分布していないことに注意して、次を使用します。

(arc4random() % (hi - lo + 1)) + lo
于 2011-04-06T08:34:06.713 に答える
1

int r = arc4random()%8 + 1;

このタスクに使用したくない理由と、代わりに使用する必要があるものについては、他の回答(たとえば、私からの回答)を参照してください。%

于 2011-04-06T02:52:11.200 に答える
1

必要な範囲の番号が得られるまで繰り返し試して、不要な番号を破棄することができます。これは数学で「受け入れ-棄却法」という派手な名前を持っています。シンプルで機能します。

これに時間がかかることが心配な場合は、理論的にはそうなる可能性があります。しかし、このアプローチは統計アプリケーションで常に使用されています。whileループをN回通過する確率は、Nが増加するにつれて急速に減少するため、ループを通過する平均回数は少なくなります。

于 2011-04-06T03:31:58.783 に答える