C语言如何不使用if/else或switch case计算三个数的最大值
无分支实现三整数最大值计算
你写的两数最大值计算用纯算术运算实现,全程没有分支判断,完全符合要求。求三个数的最大值不需要额外引入新逻辑,直接嵌套复用这套两数求最大值的规则就行:先算出前两个数的最大值,再把这个临时结果和第三个数做一次两数最大值运算,得到的就是三个数里的最大值。
完整实现代码
#include <stdio.h> #include <stdlib.h> int main() { int num1, num2, num3, max; scanf("%d %d %d", &num1, &num2, &num3); // 先计算前两个数的最大值 int temp_max = (num1 + num2 + abs(num1 - num2)) / 2; // 再用临时最大值和第三个数比较,得到三者最大值 max = (temp_max + num3 + abs(temp_max - num3)) / 2; printf("%d\n", max); return 0; }
原理解释
- 你用的两数最大值公式本质是靠算术运算自动选值:当
a >= b时,abs(a-b) = a-b,代入公式得(a + b + a - b)/2 = a;当b > a时,abs(a-b) = b -a,代入得(a + b + b -a)/2 = b,整个过程没有任何条件跳转,完全是算术计算。 - 嵌套调用这套公式不会引入任何if/else、switch分支结构,和你原本的两数实现思路完全一致。
提示:如果输入的整数数值较大,两数相加可能超过
int类型的取值上限触发溢出,这种场景下可以将变量类型替换为long long,同时把scanf/printf里的格式符改为%lld即可。
内容的提问来源于stack exchange,提问作者Abdul Mozid
相关产品推荐
相关产品推荐

