我有一些整数数组,我随机生成,例如0到9之间 我有一组约束,我需要应用于这一代。
例如:
1)约束1 - >数组中偶数位置的数字应为0或1
2)约束2 - >数组应该在偶数值上至少有一个0和至少一个1
等...
我现在要做的是:
我随机生成数字数组
然后对于每个偶数位置,我在0和1之间随机选择
然后我检查每个偶数值,我至少有一个0和至少一个1.如果没有,我用上面的约束重新计算所有值(然后对于每个偶数位置,我在0和1之间随机选取)直到我有一些有用的东西(在做)
但是,这很好用,因为这些是非常简单的约束。
3)约束3 - >数字之间的差异总和应优于某个值。
等等...... 我遇到的问题是它是依赖于内部的约束问题,我不想封装do在另一个do while等等...当我添加一个约束时。以最干净的方式实现这一目标的正确方法是什么?
编辑:
我意识到我一点都不清楚......我道歉。 我编辑了约束以便于理解。
我的代码看起来像那样(在记事本上键入++可能是错误的):
std::vector<int> myVector;
int N = 100; // vector contains 100 values
do{
myVector.clear();
for(int i=0;i<N;i++){
if(i%2==0){
myVector.push_back(rand() % 2);
}
else{
myVector.push_back(rand() % 10);
}
}
}while(!doesContains0and1(myVector));
bool MyClass::doesContains0and1(std::vector<int> avector)
{
bool returnVal = true;
for(int i=0;i<avector.size;i++){
if(i%2==0){
if(!avector.contains(0) || !avector.contains(1){
returnVal = false;
}
}
}
return returnVal;
}
3)约束意味着,如果我有例如:
0 5 1 7 0 9 0 1 1
对abs(5-0)+ abs(1-5)+ abs(7-1)+ ...等有限制&gt;某个值
这些约束是示例,我更需要一些方法而不是纯代码:)
感谢您的帮助!
答案 0 :(得分:0)
让我来看看......
int sum;
for (int i = 0 ; i < array_size ; i++){
if (!(i % 10)) sum = 0; // resets the sum to 0
if(i % 2){ //even or odd
//odd
sum += array[i] = rand() % 2; // 1 or 0
if ((!(i % 10)) && (sum == 0 || sum == 5))
array[i] = sum?0:1;
}else{
//even
array[i] = rand();
}
}
这遵循前两个约束。总和将计算每个子集10中的1的数量。所有0将产生0的总和,并且所有1将产生5的总和。它将相应地设置最后一个元素。
我不确定如何解释第三个约束,但希望这可以让你开始