想要生成一个自定义范围内的随机整数,语言之间的差异还真不是一般的大。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();
}
}
都记到这里,以防哪天还要用到。