#include<stdio.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <stdint.h>
//return 0~N-1
int rand_n(int n){
uint64_t x=(RAND_MAX+1)/n;
uint64_t cap=x*n;
uint64_t r=0;
do{
r=rand();
}while(r>=cap);
return r/x;
}
int main(){
srand((int)time(0));
for(int i=0;i<10;i++){
std::cout<<rand_n(3)<<std::endl;
}
return 0;
}
Reference:
[1] how-to-generate-uniform-distribution
[2] How do I get a specific range of numbers from rand
网友评论