高效省内存生成随机参数组

高效省内存生成随机参数组

问题:生成随机整数,找到对应参数组

最小、最大、步长、默认值
P1:[1,10,2] 4
P2:[3,12,3] 5
P3: [1,3,2]  3

解题:

第一步:计算每个参数个数,存默认值是否重合以及所在索引
第二部:生成随机数int,找到对应参数索引,取对应参数组

第一步---------------------------------------------------------------------------------------------------------------------------------------------------------------
1.计算每个参数个数,存默认值是否重合以及所在索引
std::vector<int> vecPum(3);
std::vector<std::pair<bool,int>> vecDefault(3);
P1:pr1 = ceil((max - min)/step) + 1 = ceil((10 - 1)/2)+1 = 6, 
    判断4是否在步长内,不在求所在的索引(min+step*n = 4, 求n,是整数就在,不是不在向上取值即为索引),r = (4 - 1)/2 = 1.5,r-(int)r > 0? false:ture,还要和最值比较一下   pr1 = pr1 +1 = 7;
    所以P1参数个数7个,[1,3,4,5,7,9,10], 
	vecPum[0] = 7;
	vecDefault[0] = std::make_pair(false, ceil(r)= 2);
P2:同理
   P2有5个,[3,5,6,9,12]
   vecPum[1] = 5;
   vecDefault[1] = std::make_pair(false, ceil(r)= 1);
P3:[1,3]
   vecPum[2] = 2;
   vecDefault[2] = std::make_pair(true, ceil(r)= 1);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
   
第二步--------------------------------------------------------------------------------------------------------------------------------------------------------------
2.计算总数,生成随机数选中对应的参数组
5*7*2 = 70 个,取1~70的随机数

假设随机数:42;
post = 0;
for(int i=0; i<7; ++i)
    for(int j=0; j<5; ++j)
	      for(int k=0; k<2; ++k)
                  cout<<++post<<endl;
				  
问:现已知post == 42
求:i, j , k 的值
	41/2 = 20....1
	20/5 = 4.....0
	4/7 = 0......4
对应的i, j , k为 4,0,1
P1:默认值索引df=2, i=4, i > df? m+d*(i-1): i==d? df:1+d*i
   P1: 1+2*3 = 7
P2:df=1, i=0, 
   P2: 3+i*d = 3
P3:df=1, i=1
   P3: 3
   
索引post == 42对应的参数组[7,3,3]

你可能感兴趣的:(c++,算法)