objective-c中並沒有提供生成隨機數的函式,所以使用c中提供的rand()、srand()、random()、arc4random()幾個函式。
1. 使用 arc4random 生成隨機數
1.1 隨機整數:範圍在 [0,100),包括0,不包括100
int x = arc4random() % 100;
1.2 隨機整數:範圍在 [from,to],包括from,包括to
int x = arc4random() % (to - from + 1) + from;
1.3 抽取方法:隨機整數,範圍在[from, to]
-(int)getrandomnumber:(int)from to:(int)to
return (int)(from + (arc4random() % (to – from + 1)));
2. 使用 rand() 生成隨機數
2.1 隨機整數:範圍在 [from,to],包括from,包括to
int x = rand() % (to - from + 1) + from;
2.2 注意
2.1 在標準的c庫中 rand() 函式可以生成 0~rand_max 之間的乙個隨機數,其中 rand_max 是 stdlib.h 中定義的乙個整數,它與系統有關。
2.2 因為 rand() 函式是按指定的順序來產生整數,因此每次執行下面的語句都列印相同的兩個值,所以說c語言的隨機並不是真正意義上的隨機,有時候也叫 偽隨機數。
printf("random numbers are: %i %i\n",rand(),rand());
2.3 為了使程式在每次執行時都能生成乙個新序列的隨機值,我們通常通過函式 srand() (來自stdlib.h) 為隨機數生成器播散種子。只要種子不同 rand() 函式就會產生不同的隨機數序列。
srand((unsigned)time(0));
3. 比較
rand() 和 random() 實際並不是乙個真正的偽隨機數發生器,在使用之前需要先初始化隨機種子,否則每次生成的隨機數一樣。
arc4random() 是乙個真正的偽隨機演算法,不需要生成隨機種子,因為第一次呼叫的時候就會自動生成。而且範圍是 rand() 的兩倍。在iphone中,rand_max是0x7fffffff (2147483647),而arc4random()返回的最大值則是 0x100000000 (4294967296)。
精確度比較:arc4random() > random() > rand()。
使用比較:
// 1. rand(),初始化隨機種子,不加這句每次產生的隨機數不變
srand((unsigned)time(0));
int i = rand() % 100;
// 2. random()
srandom(time(0));
int i = random() % 100;
// 3. arc4random()
int i = arc4random() % 100 ;
4. 生成隨機小數,生成隨機整數再除
4.1. 隨機小數:[0,1)
float f = (float)(arc4random()%100) / 100 ;
兩個數列取第k小數
1 1 第k k 小數 number cpp c pas 問題描述 有兩個正整數數列,元素個數分別為n和m。從兩個數列中分別任取乙個數 相乘,這樣一共可以得到n m個數,詢問這n m個數中第k小數是多少。輸入格式 輸入檔名為number.in。輸入檔案包含三行。第一行為三個正整數n,m和k。第二行為...
輸入任意兩個數,找到兩個數之間的回文數
如題,編寫乙個這樣的程式實現找出兩個數之間的回文數,先介紹下什麼是回文數,回文數就是這個數正過來寫和反過來寫的數值是相等的,如12321,反過來寫還是12321.先上 include include include using namespace std bool fun int void main...
LeetCode 兩個陣列的交集 I
給定兩個陣列,寫乙個函式來計算它們的交集。例子 給定 num1 1,2,2,1 nums2 2,2 返回 2 解題思路 由於問題中的元素是唯一的,所以我們只關心元素的有無,那麼我們可以使用set這個結構。首先將nums1的所有資料存入set中,查詢nums2中的資料是否在這個set中,如果在的話,我...