gpt4 book ai didi

c++ - 从自然语言到C++表达式

转载 作者:行者123 更新时间:2023-12-04 03:35:39 25 4
gpt4 key购买 nike

任务:

Translate the following natural language expressions to C++ expressions. Assume that all the variables are non-negative numbers or boolean (of value true or false).



自然语言:

Either a and b are both false or c is true, but not both.



我的解决方案:
(a==0 && b==0)xor(c==1)

教授的解决方案:
(!a && !b) != c

问题:
  • 我想我稍微理解第一个括号,说“not-a”和“not-b”,然后假设a和b在开始时假定为非零,那么a和b必须是错误的。正确的?
  • 但是说“不等于c”的部分呢?
  • 我不了解Professors解决方案,有人可以为我分解一下吗?

  • 感谢您的帮助!

    最佳答案

    我假设abcbool

    让我们画一些真值表:

    | a | !a | a==1 | a==0 |
    | 0 | 1 | 0 | 1 |
    | 1 | 0 | 1 | 0 |

    如您所见, aa==1是等效的,并且 !aa==0也等效,因此我们可以将 (a==0 && b==0)xor(c==1)重写为 (!a && !b) xor c

    现在再看一些真值表:
    | a | b | a xor b | a != b |
    | 0 | 0 | 0 | 0 |
    | 0 | 1 | 1 | 1 |
    | 1 | 0 | 1 | 1 |
    | 1 | 1 | 0 | 0 |

    因此 a!=b等效于 a xor b,因此我们可以将 (!a && !b) xor c重写为 (!a && !b)!=c。如您所见,您的解决方案是完全等效的,只是写有不同的“符号”。

    UPD :忘记提及。教授的解决方案完全以这种方式出现是有原因的。

    教授的解决方案比较惯用。尽管您的解决方案在技术上是正确的,但它不是惯用的C++代码。

    第一个小问题是类型的用法。当您将 bool 值与数字进行比较或使用 int时,您的解决方案依赖 boolxor之间的转换,后者也是 int的“按位异或”运算符。在现代C++中,使用正确类型的值并且不依赖于此类转换有时会引起人们的极大赞赏,因为它们有时不那么清晰且难以推理。对于 bool,这样的值分别是 truefalse而不是 10!=也比 xor更合适,因为从技术上来说 bool是作为数字存储的,但是在语义上您没有任何数字,只是逻辑值。

    第二个问题也是关于成语的。它位于这里: a == 0。将 bool 表达式与 bool 常量进行比较不是一个好习惯。如您所知, a == true完全等效于 aa == false只是 !anot a(我更喜欢后者)。要了解比较不佳的原因,只需比较两个代码段并确定,这会更清楚:
    if (str.empty() == false) { ... }


    if (not str.empty()) { ... }

    关于c++ - 从自然语言到C++表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59172504/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com