如何说一个有效或无效,即使一个是,另一个不是

How to say one is valid or invalid even though one is and the other is not?

本文关键字:一个 另一个 有效 无效      更新时间:2023-10-16

我需要它说如果两个数字都有效,如果它们都有效,如果它们都无效,如果一个有效而另一个无效,我需要它说哪个有效,哪个无效

我尝试了下面的代码,它只是一直说有效或无效,即使其中一个无效而第二个有效

所以如果两者都有效,我想说:它们是有效的

如果两者都无效:它们无效

如果一个有效,另一个无效,则应说明它们是否有效

if ((Q == 100 || Q == 400) && (W == 100 || W == 400))
    cout << "they are invalidn";
else if (!((Q == 100 || Q == 400) && (W == 100 || W == 400))) //else if ((Q != 100 && Q != 400) && (W != 100 && W != 400)) //
    cout << "they are validn";
else {
    if (Q == 100 || Q == 400)
        cout << "Q is invalid";
    else
        cout << "Q is valid";
    if (W == 100 || W == 400)
        cout << "W is invalidn";
    else
        cout << "W is validn";
}

我预计它会说:

Q is invalid
W is valid

当 W==200 和 Q==400 时

有一个简单的方法可以做到这一点。这是如何做到的。

  • 将变量设置为 0 ;假设它是 x
  • 如果 q 有效,则设置 x 的低阶位
  • 如果 w 有效,则设置 x 的第二个到最低位
  • 如果 x=0 打印,则两者都无效
  • 如果 x=1 打印 q 有效 w 无效
  • 如果 x=2,则打印 q 无效 w 有效
  • 如果 x=3,则打印均有效
#include <bits/stdc++.h>
using namespace std;
main()
{
    int  Q, W;
    cin >> Q >> W;
    if ((Q == 100 || Q == 400) && (W == 100 || W == 400)){
        cout << "they are invalidn";
        return 0;
    }else if ((Q != 100 && Q != 400) && (W != 100 && W != 400)){
        cout << "they are validn";
        return 0;
    }
    if (Q == 100 || Q == 400)
            cout << "Q is invalid" << endl;
        else
            cout << "Q is valid" << endl;
    if (W == 100 || W == 400)
            cout << "W is invalidn";
        else
            cout << "W is validn";
}

要了解出了什么问题,您需要检查逻辑运算符的结果是什么 W=200Q=400

( // !false => true
  !( // true && false => false
     (Q == 100 || Q == 400) && // true
     (W == 100 || W == 400)    // false
   )
)

但是你希望(Q == 100 || Q == 400)(W == 100 || W == 400)都是false的,所以你想写:

(
  (
     ! (Q == 100 || Q == 400) &&
     ! (W == 100 || W == 400)
   )
)

如果现在要将!移出大括号,则需要将&&更改为 ||

(
  !(
      (Q == 100 || Q == 400) ||
      (W == 100 || W == 400)
   )
)

我建议使代码更易于阅读,这样你就不必处理更复杂的布尔代数。您可以通过引入帮助程序变量来做到这一点:

const bool q_is_valid = Q != 100 && Q != 400;
const bool w_is_valid = W != 100 && W != 400;

现在,其余的编写和阅读变得更加简单:

if (q_is_valid && w_is_valid) {
    cout << "Both are valid.n";
} else if (!q_is_valid && !w_is_valid) {
    cout << "Both are invalid.n";
} else {
    cout << "Q is " << (q_is_valid ? "valid" : "invalid") << ".n"
         << "W is " << (w_is_valid ? "valid" : "invalid") << ".n";
}
相关文章: