c++ 如何检查三个值是全0还是全1

mbskvtky  于 2023-01-28  发布在  其他
关注(0)|答案(7)|浏览(171)

有3个整型变量可以有0或1的值。如果全部为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整数值(不是布尔值)。

6l7fqoea

6l7fqoea1#

在您的代码中,对用户输入的值没有限制。
如果您只想查看是否所有值都彼此相等,您可以执行以下操作:

if (a == b && b == c)
{
    cout << "A, B, and C are all equal" << endl;
}
else 
{
    cout << "A, B, and C contain different values" << endl;
}
ntjbwcob

ntjbwcob2#

if( ((a & b & c) ==1) || ((a | b | c) == 0))
von4xj4u

von4xj4u3#

#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;
}
qacovj5a

qacovj5a4#

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

gblwokeq5#

更通用的解决方案:基于a XNOR b确保这两个值都是0或1的思想。

zfycwa2u

zfycwa2u6#

假设你使用的是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;
}
agxfikkp

agxfikkp7#

这里是一个更通用的C++17用户解决方案。这将允许你比较任何类型的任意数量的值。

template<typename... T>
constexpr bool equal(T... args) {
    return ([&] (T arg) {
        return ((arg == args) && ...);
    }(args) && ...);
}

equal(4,4,4); // evaluates to true
equal('c','c','c','c'); // evaluates to true

相关问题