【问题标题】:How to check for a condition that is never met?如何检查从未满足的条件?
【发布时间】:2012-01-06 11:13:53
【问题描述】:

举个例子来说明一下,假设我有一个程序接受来自用户的两个输入,a 和 b。程序增加 a 并减少 b。程序返回 a 和 b 相等的值。因此,a 必须更小,b 必须更大。但是如果用户输入相反的内容呢? a 越大 b 越小?程序显然会进入无限循环。但是假设我希望程序返回“这两个数字永远不会相遇”。那我该如何检查呢?请不要回答检查数字并分别回复。这只是一个例子。我想知道如何检查一个永远无法满足的条件。

另一个例子,比如比较两个数字。假设我有两个数字,并且我一直将它们随机化。当它们相等时,程序应该返回 true,否则返回 false。当数字不相等时,它不应进入无限循环。我只能在每次迭代中不断比较数字,并在它们相等时立即返回 true。但是它们很可能永远不会相等并且程序永远不会终止。如何检查这种情况并返回数字永远不相等的东西。

【问题讨论】:

  • 不清楚你在这里问什么。您是否正在寻找一种通用方法来检查会导致您的问题无法终止的输入?那就是halting problem,没有通用的解决方案。
  • 我想你已经回答了你的问题。 a 必须更小,b 必须更大。 因此,如果a 大于b,则条件永远不会为真,因此它将无限运行。
  • en.wikipedia.org/wiki/Halting_problem的研究仍在继续!
  • @RanhiruCooray 请再看一遍这个问题,我不想回答我给出的例子
  • aahh ... @OliCharlesworth 感谢您指出这一点。 :(

标签: logic


【解决方案1】:

必须根据具体情况进行;一般问题(给定由变量条件控制的迭代过程,确定条件是否会采用给定值,例如 True)等价于停机问题,这是不可计算的......

【讨论】:

    【解决方案2】:

    一个简单的 if 语句,像这样?

    if (a <= b)
      throw "Condition cannot be met"
    else
        for ( ; a != b; a--, b++) {
            // Do something
        }
    

    C++ 示例

    编辑我弄错了 A 和 B!但同样的场景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-19
      • 2014-04-30
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2016-05-30
      • 2018-10-23
      相关资源
      最近更新 更多