您的当前位置:首页正文

随机数生成

来源:东饰资讯网

想要生成一个自定义范围内的随机整数,语言之间的差异还真不是一般的大。python用惯了,直接random.randint(a,b),感觉挺方便的。今天想用其它的语言来实现同样的功能,却花了我好长时间。
首先想到了c++,就去cppreference上找randint,找到了!上面说randint定义在头文件<experimental/random>里,可无论是vc++还是g++都找不到这个头文件,我能怎么办?想着java肯定有randint,就想换用java实现,可还是得到了一个error!(现在才知道python是多么的好用。)
终于让我在msdn上找到了一种写法。

#include <iostream>
#include <random>
using namespace std;

void random_in_place(int A[], int n){
//将数组A随机排列
    random_device rd;
    mt19937 gen(rd());
    for (int i = 0; i < n; ++i) {
        uniform_int_distribution<> dist(i, n-1);
        swap(A[i], A[dist(gen)]);
    }
}
int main()
{
    int A[8] = { 1,2,3,4,5,6,7,8 };
    random_in_place(A, 8);
    for (int i = 0; i < 8; ++i) {
        cout << A[i] << ' ';
    }
    cout << endl;
}

还有一种方法也能生成自定义范围内的随机数

int NUM = 8;  //自定义的一个范围,求余的话就是[0,8)。
srand(static_cast<unsigned>(time(0)));
int choise = (rand() % NUM); //适应于random_in_place,就是rand()%(n-i)+i

然后又用java实现了一下。

import java.util.Random;

class Random_in_place {

    public static void random_in_place(int A[],int n)
    {
        Random rand = new Random();
        for(int i = 0; i<n;++i)
        {
            int temp = A[i];
            int j = rand.nextInt(n-i)+i;   //java的nextInt(n)生成[0,n)
            A[i] = A[j];
            A[j] = temp;
        }
    }

    public static void main(String[] args) {
        int [] A = new int[8];
        for(int i = 0;i < A.length; ++i)
        {
            A[i] = i+1;
        }
        random_in_place(A,8);
        for(int i = 0; i < A.length; ++i)
        {
            System.out.print(A[i]);
            System.out.print(" ");
        }
        System.out.println();
    }
}

都记到这里,以防哪天还要用到。

显示全文