【问题标题】:Check if a number has touched threshold检查数字是否已触及阈值
【发布时间】:2015-01-22 10:29:52
【问题描述】:

我有一个变量A(初始化为零),变量B(初始化为常数整数X)

变量 A 不均匀增加 例如:+1, +3, +7, + 24.......

我想检查 variableA 是否已达到 VariableB 的预定义阈值,我尝试使用 Mod 运算符,但由于 variableA 以不均匀的格式增加,我无法准确检查 @VariableA 与 VariableB 交叉的点阈值。

例如: 案例一

变量A - 12 变量 B - 20 - 输出 - A 尚未触及阈值

案例 2

变量A - 19 变量 B - 20 - 输出 - A 尚未触及阈值

案例 3 变量A - 25 变量 B - 20 - 输出 - A 已触及当前阈值

案例 4 变量 A - 41 变量 B - 20 - 输出 - A 已触及阈值

案例 5 变量A - 48 变量 B - 20 - 输出 - A 没有触及下一个阈值,因为 20+20+20 还没有发生。

编辑:

案例 5 变量 A - 48 变量 B - 20 - 第一个阈值 当变量 A 大于或等于变量 B (20) 时将达到, 当变量 A 大于或等于时,将达到第二个阈值 2XVariableB(40),当VariableA更大时,将达到第三个阈值 大于等于 3XVariableB(60)

请提出建议。..

【问题讨论】:

  • 保持VariableB 不变不是我的解决方案。如果值超过当前阈值,您将不得不加倍 VariableB 并进行比较。
  • 我认为你没有充分解释什么是“触及门槛”。我会说VariableA>=VariableB,除了你的情况5,我不明白。
  • 我不明白...如果变量 B 为 20,那么只要 VariableA > 20,它就会达到某个阈值(VariableB 的倍数),请更好地解释一下什么是预期的输出条件。
  • 使用比较运算符!!你能解释一下这是什么Since 20+20+20 has not happened.
  • ...嗯...这不是字面上你已经说过了吗?

标签: c++ c math integer


【解决方案1】:
int a = 0, b = 20;
while(...)
{
    increment(); 
    if(a >= b) //Reached threshold
    {
        do_stuff();  
        b += 20;
    }
}

您的问题不是很清楚,但可能是这样的?

(答案已编辑,因为我在 a & b 初始化时出错了)

【讨论】:

  • 很遗憾没有回答这个问题
【解决方案2】:

如果您可以随时使用函数来增加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 再次低于第一个阈值时,这也将处理增量更新中的负数。它还可以正确处理负数,而基于 % 的解决方案可能不会。

【讨论】:

    【解决方案3】:

    (伪代码,未测试)

    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";
    

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多