读书人

将一维区间随机划分为指定块数解决思路

发布时间: 2012-05-20 16:03:12 作者: rapoo

将一维区间随机划分为指定块数
我想将一维区间随机划分为指定块数,返回每块的大小。下面是我的代码,可是达不到预定效果。各位有什么方法可以实现这一功能,不吝赐教!谢谢了!

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块。

读书人网 >C语言

热点推荐