C++ shuffle常見(jiàn)問(wèn)題解析

c++
小樊
95
2024-07-13 04:34:32

  1. 如何實(shí)現(xiàn)一個(gè)打亂數(shù)組的函數(shù)?

可以通過(guò)使用隨機(jī)數(shù)生成器來(lái)實(shí)現(xiàn)打亂數(shù)組的函數(shù)。一種簡(jiǎn)單的方法是使用Fisher-Yates算法,該算法將數(shù)組中的元素與隨機(jī)位置上的元素進(jìn)行交換,直到數(shù)組中的所有元素都被遍歷一遍。

以下是一個(gè)用C++實(shí)現(xiàn)Fisher-Yates算法的示例代碼:

#include <cstdlib>
#include <ctime>
#include <vector>

void shuffleArray(std::vector<int>& nums) {
    srand(time(0));
    
    for (int i = nums.size() - 1; i > 0; i--) {
        int j = rand() % (i + 1);
        std::swap(nums[i], nums[j]);
    }
}

使用該函數(shù)可以對(duì)一個(gè)整數(shù)數(shù)組進(jìn)行隨機(jī)打亂。

  1. 如何在C++中生成隨機(jī)數(shù)?

在C++中生成隨機(jī)數(shù)可以使用標(biāo)準(zhǔn)庫(kù)中的<cstdlib>頭文件中的rand()函數(shù)。但是需要先調(diào)用srand()函數(shù)來(lái)設(shè)置隨機(jī)數(shù)生成器的種子,可以使用當(dāng)前時(shí)間作為種子。

以下是一個(gè)簡(jiǎn)單的示例代碼:

#include <cstdlib>
#include <ctime>

int main() {
    srand(time(0));
    
    int randomNum = rand();
    
    return 0;
}

可以通過(guò)對(duì)隨機(jī)數(shù)取模來(lái)獲得一個(gè)特定范圍內(nèi)的隨機(jī)數(shù),例如rand() % 100可以生成一個(gè)0到99之間的隨機(jī)數(shù)。

  1. 如何在C++中使用shuffle函數(shù)?

C++標(biāo)準(zhǔn)庫(kù)中提供了std::shuffle函數(shù)來(lái)對(duì)容器中的元素進(jìn)行隨機(jī)打亂。該函數(shù)在<algorithm>頭文件中定義。

以下是一個(gè)簡(jiǎn)單的示例代碼:

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
    
    std::shuffle(nums.begin(), nums.end(), std::default_random_engine());
    
    return 0;
}

使用std::shuffle函數(shù)可以方便地對(duì)容器中的元素進(jìn)行隨機(jī)打亂。

0