我有一个VariableA(初始化为零),VariableB(初始化为常数整数X)
变量A不均匀地增加,例如:+ 1,+ 3,+ 7,+ 24 .......
我想检查变量A是否已经达到预定义的VariableB阈值,我尝试使用Mod运算符,但由于变量A以不均匀的格式增加,我无法准确检查@变量A已经越过变量B阈值。
例如: 案例1
VariableA - 12 VariableB - 20 - 输出 - A尚未达到阈值
案例2
VariableA - 19 VariableB - 20 - 输出 - A尚未达到阈值
案例3 VariableA - 25 VariableB - 20 - 输出 - A已触及当前阈值
案例4 VariableA - 41 VariableB - 20 - 输出 - A已触及阈值
案例5 VariableA - 48 VariableB - 20 - 输出 - A未触及下一个阈值,因为20 + 20 + 20没有发生。
编辑:
案例5变量A - 48变量B - 20 - 第一阈值 当VariableA大于或等于变量B(20)时将到达, 当变量A大于或等于时,第二个Threashold将到达 2XVariableB(40),当VariableA更大时,第三个阈值将达到 等于或等于3XVariableB(60)
请建议。 ..
答案 0 :(得分:1)
int a = 0, b = 20;
while(...)
{
increment();
if(a >= b) //Reached threshold
{
do_stuff();
b += 20;
}
}
你的问题不是很清楚,但可能是这样的?
(答案已编辑,因为我在& b初始化时错了)
答案 1 :(得分:0)
如果您只想在a
增加时使用某个函数,这非常简单。
int foo(int* a, int b, int increment){
const int bar = *a / b;
*a += increment;
return bar - *a / b;
}
这不仅可以告诉您,还有多少阈值a
已提升。
const int bar = foo(&VariableA, VariableB, 13);
if(bar == 1){
printf("VariableA has touched %s threshold", (VariableA < VariableB * 2 ? "the current" : "a"));
}else if(bar > 1){
printf("VariableA has touched %d thresholds", bar);
}else{
printf("VariableA has not touched %s", (VariableA < VariableB * 2 ? "the threshold yet" : "the next threshold"));
}
当VariableA
再次低于第一个阈值时,这也将处理增量更新中的负数。它还可以正确处理负数,而基于%
的解决方案可能不会。
答案 2 :(得分:0)
(伪代码,未经测试)
int oldA, A, B, C;
oldA = A;
A += whatever;
C = A/B ; /* integer division on purpose */
if ( (oldA < C*B) && (A >= C*B) )
printf "hit a threshhold\n";