如何说一个有效或无效,即使一个有效而另一个无效呢?

时间:2019-04-21 10:58:40

标签: c++

我需要说这两个数字都是有效的,如果两个数字都是无效的,那么一个数字是无效的;如果一个数字是有效的而另一个数字不是,那么它需要说出哪个是有效的,哪个是无效的。 t

我尝试了下面的代码,即使其中之一无效而第二个有效,它仍然会说有效或无效

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

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

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

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

    if (W == 100 || W == 400)
        cout << "W is invalid\n";
    else
        cout << "W is valid\n";
}

我希望它说:

Q is invalid
W is valid

当W == 200和Q == 400时

4 个答案:

答案 0 :(得分:1)

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

  • 将变量设置为0;说是x
  • 如果q有效,则设置x的低位
  • 如果w有效,则将x的第二个设置为最低位
  • 如果x = 0打印都无效
  • 如果x = 1打印q有效,则w无效
  • 如果x = 2打印q无效,则w有效
  • 如果x = 3打印都有效

答案 1 :(得分:1)

#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 invalid\n";
        return 0;
    }else if ((Q != 100 && Q != 400) && (W != 100 && W != 400)){
        cout << "they are valid\n";
        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 invalid\n";
        else
            cout << "W is valid\n";
}

答案 2 :(得分:0)

要了解出了什么问题,您需要检查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)
   )
)

答案 3 :(得分:0)

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

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