ios取兩個數之間的隨機小數 iOS 生成隨機數

2021-10-13 12:29:49 字數 1601 閱讀 6859

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中,如果在的話,我...