在最少数量的比较中比较5个整数

Luk*_*asz 2 c# algorithm

我有这个代码,需要确保所有结果变量都相等?

long result1 = timer.CalculateElapsedTimeInMinutes();
long result2 = timer.CalculateElapsedTimeInMinutes();
long result3 = timer.CalculateElapsedTimeInMinutes();
long result4 = timer.CalculateElapsedTimeInMinutes();
long result5 = timer.CalculateElapsedTimeInMinutes();
Run Code Online (Sandbox Code Playgroud)

这就是我所做的,但我觉得它可以用更简单的方式完成,也许不是吗?

bool allEqual = (result1 == result2) && (result3 == result4) && (result1 == result3) && (result1 == result5);
Run Code Online (Sandbox Code Playgroud)

谢谢.

Jon*_*eet 14

只是关于可能存在的同异或什么的这样的一些哈克/高明位变换的方式-但你的代码使你想要做清楚什么,并且仍将是可笑的快.这成为瓶颈的可能性接近于0,不值得考虑IMO - 所以请使用最易读的代码.

不过,我在你的比较中会更加一致:

bool allEqual = (result1 == result2) && 
                (result1 == result3) && 
                (result1 == result4) &&  
                (result1 == result5);
Run Code Online (Sandbox Code Playgroud)

IMO,你可以直观地看到你已经覆盖了所有基地.


Kip*_*Kip 5

不,你需要至少n -1次比较.虽然我这样写:

bool allEqual = (result1 == result2)
             && (result2 == result3)
             && (result3 == result4)
             && (result4 == result5);
Run Code Online (Sandbox Code Playgroud)