我有4个数字(int a,int b,int c,int d)等于rand()%7。如何以最短的方式发现数字是否相等?
答案 0 :(得分:1)
您可以通过一次测试来完成此任务:
int x = (1 << a) | (1 << b) | (1<< c) | (1<< d);
if ((x & (x >> 1)) == 0)
printf("a, b, c and d are identical\n");
它起作用,因为所有值都很小,小于int
中的位数。该测试检查x
是否为2的幂,只有当a,b,c和d的所有值相同时才会为真。
chux提出了一个更短的解决方案:
if ((1 << a) == ((1 << b) | (1 << c) | (1 << d)))
printf("identical\n");
它可能不会比指令数量中的简单(a == b && b == c && c == d)
短,也不会短于计算时间,具体取决于您的平台,编译器,选项的具体情况......
这是一个更简单的一个,只使用一个测试,适用于更大范围的值,例如所有正int
值:
if (((a - b) | (b - c) | (c - d)) == 0)
printf("identical\n");
答案 1 :(得分:0)
要查明这些数字是否相等,您可以这样做:
if (a == b && b == c && c == d)
上述条件得到了数学中平等的传递性质的支持,其中它表明:
如果a = b且b = c,则a = c。
鉴于该财产,我们可以说:
如果a = b,b = c,c = d,则a = c,a = d,b = d。
来源:Mathwords