2

0または1の値を持つことができる3つの整数変数があります。すべてが0またはすべてが1の場合、特定のステートメントを出力します。他のすべての値の組み合わせについては、別のステートメントを出力します。

私はうまくいく以下を試しました。ifステートメントを書くためのより良い方法はありますか?

#include <iostream>
using namespace std;

int main()
{
    int a, b, c;
    cin >> a >> b >> c;

    if(!(a != 0 && b != 0 && c != 0) && !(a == 0 && b == 0 && c == 0))
    {
        cout << "a, b or c have mixed values of 1 and 0" << endl;
    }
    else
    {
        cout << "All of a, b and c are either 1 or 0" << endl;
    }

    system("pause");
    return 0;
}

混乱を招いて申し訳ありません。簡単な例として挙げたので、実際には上記のコードで課されたa、b、cの値のチェックはありません。ifステートメントは、a、b、およびcがすべて等しいかどうかをチェックするものではありません。それらすべてが0または1の整数値(ブール値ではない)であるかどうかを確認することです。

4

6 に答える 6

7

コードでは、ユーザーが入力する値に制限はありません。

すべての値が互いに等しいかどうかを確認したいだけの場合は、次のことができます。

if (a == b && b == c)
{
    cout << "A, B, and C are all equal" << endl;
}
else 
{
    cout << "A, B, and C contain different values" << endl;
}
于 2013-01-01T03:34:22.927 に答える
6
if( ((a & b & c) ==1) || ((a | b | c) == 0))
于 2013-01-01T03:34:50.513 に答える
4
#include<iostream>
using namespace std;

int main()
{
int a = 10, b = 10, c = 10;
cin >> a >> b >> c;

if((a == 0 && b == 0 && c == 0)||(a==1&&b==1&&c==1))
{
      cout << "All of a, b and c are either 1 or 0" << endl;

}
else
{
cout << "a, b or c have mixed values of 1 and 0" << endl;
}

system("pause");
return 0;
}
于 2013-01-01T03:36:12.783 に答える
1
if( (b!=c) || (a ^ b)) 
{   
  std::cout << "a, b or c have mixed values of 1 and 0" << std::endl;
}   
else
{   
  std::cout << "All of a, b and c are either 1 or 0" << std::endl;
}   

効率の悪い別の方法:

if( (a!=0) + (b!=0) - 2 * (c!=0) == 0 )
{
    cout << "All of a, b and c are either 1 or 0" << endl;
}
else
{
    cout << "a, b or c have mixed values of 1 and 0" << endl;
}
于 2013-01-01T03:40:21.833 に答える
0

より一般的な解決策:~(~(a ^ b) ^ c)a XNOR b2つが両方とも0または1であることを確認するという考えに基づいています。

于 2013-01-01T04:48:09.230 に答える
0

C ++ 11を使用している場合、次のような可変個引数テンプレートを使用して、探しているものを実現できます。

template <typename T, typename U>
bool allequal(const T &t, const U &u) {
    return t == u;
}

template <typename T, typename U, typename... Args>
bool allequal(const T &t, const U &u, Args const &... args) {
    return (t == u) && allequal(u, args...);
}

そして、あなたはそれをあなたのコードでこのように呼ぶことができます:

if (allequal(a,b,c,0) || allequal(a,b,c,1))
{
  cout << "All of a, b and c are either 1 or 0" << endl;
}
于 2014-07-26T17:35:47.063 に答える