我想这样做
我有两个数字,A和B,它可以是A大于或小于B.我想做什么:
将B与A
如果他们的比例是一个范围的“ouside”,那么取一个随机数并将其添加到“A” - 现在检查他们的新比率是否符合条件
0.95 < ratio < 1.05
如果没有,请尝试另一个随机。
我的问题是我遇到了无限循环......这就是我所做的:
float ratio = A/B;
if (ratio < 0.95 || ratio > 1.05) {
do {
// randomly take a negative or positive number
float random_n = ((float)rand())/RAND_MAX - 0.50;
// get an even smaller step
random_n *= 0.1;
// add or subtract the random number (depending on its sign)
A += random_n;
// form the ratio again
ratio = A / B;
cout << "lets see " << A << " " << B << " " << ratio << endl;
}
while (ratio > 0.95 || ratio < 1.05);
}
答案 0 :(得分:2)
条件应该是:
while (ratio <= 0.95 || ratio >= 1.05);
你得到了&#34;&lt;&#34;和&#34;&gt;&#34;混合。 比率 不介于0.95和1.05之间,如果它小于或等于0.95或大于或等于1.05。
如果你记得如何否定一个连词,那么很容易避免这样的错误:
NOT (0.95 <比率<1.05)=== 不(0.95 <比率 AND 比率<1.05)= === [...]
规则是:将每个 AND 更改为 OR 并取消所有子表达式:
[...] ===( NOT (0.95&lt; ratio) OR NOT (比率&lt; 1.05))==== (0.95> =比率 OR 比率> = 1.05)===(比率&lt; = 0.95 OR 比率> = 1.05)
答案 1 :(得分:1)
你的do..while循环条件应该是
while(ratio <= 0.95 || ratio =>1.05)
答案 2 :(得分:0)
问题是你正在增加A并且永远不会改变B
仍然期望比率为(0.95,1.05)。这取决于A和B的初始值来打破循环。
尝试:
B=rand()%RAND_MAX;
do {
A=rand()%RAND_MAX;
ratio = A/B;
cout<<"lets see "<< A <<" "<< B <<" "<<ratio<<endl;
}while(ratio <0.95 || ratio>1.05);
然后根据您的需要将A和B除以10的幂。
在连续运行中使用srand(time(0))
表示不同的随机值