将一维区间随机划分为指定块数
我想将一维区间随机划分为指定块数,返回每块的大小。下面是我的代码,可是达不到预定效果。各位有什么方法可以实现这一功能,不吝赐教!谢谢了!
- C/C++ code
#include <stdlib.h>#include <time.h>#include <iostream>using namespace std;int main(){ //区间的下限 int lower=10; //区间的上限 int upper=20; //欲随机划分的块数 int count=5; int *a=new int[count]; srand(time(NULL)); int sum=0; //幻数 int magic=10; for(int i=0;i<count;i++) { a[i]=rand()%magic; sum+=a[i]; } for(int i=0;i<count;i++) { a[i]=((double)a[i]/sum)*(upper-lower); cout<<a[i]<<endl; } delete []a; return 0;} [解决办法]
取10到20间的随机数应该这样写
a[i]= 10+ (rand()% 11);
一般的如果你希望取得 a到b之间(b>a,包含a和b)的随机数,
可这样写:
a[i]= a + (rand()% (b-a+1));
[解决办法]
假如0..9共10个元素随机划分为0..2共3块:
第0块,从0..10-3随机选出比如5,即0..5归第0块
第1块,从5+1..10-2随机选出比如7,即6,7归第1块
第2块,从7+1..10-1,即8,9归第2块。