我一直在做一本推荐的初学者读物中的一些基本练习:C Programming: A Modern Approach (2nd Edition)
该问题指出:使用尽可能少的if语句来确定用户输入的四个数字中的最大值和最小值。四个if语句就足够了。--由于这个问题是在本书涉及循环、数组和函数之前提出的,所以我假设不应该使用这些。
此外,我知道有一个类似的question到这一个,但没有一个满足我试图实现的要求。
1.仅使用4if
语句
1.没有for循环。
我想到的第一件事是使用逻辑or
操作符,但是如下所示,使用了8个if
语句,而且这个方法非常长,效率不高:
int a, b, c, d;
printf("Enter 4 intgeres to find largest and smallest: ");
scanf_s("%d %d %d %d", &a, &b, &c, &d);
if (a > b && a > c && a > d)
printf("Largest: %d\n", a);
if (b > a && b > c && b > d)
printf("Largest: %d\n", b);
if (c > a && c > b && c > d)
printf("Largest: %d\n", c);
if (d > a && d > a && d > c)
printf("Largest: %d\n", d);
if (a < b && a < c && a < d)
printf("Smallest: %d\n", a);
if (b < a && b < c && b < d)
printf("Smallest: %d\n", b);
if (c < a && c < b && c < d)
printf("Smallest: %d\n", c);
if (d < a && d < a && d < c)
printf("Smallest: %d\n", d);
return 0;
接下来,我继续使用下面的代码,这将是一个更好的解决方案:
int a, b, c, d;
printf("Enter 4 intgeres to find largest and smallest: ");
scanf_s("%d %d %d %d", &a, &b, &c, &d);
int max = a, min = a;
if (b > max)
max = b;
else if (b < min)
min = b;
if (c > max)
max = c;
else if (c < min)
min = c;
if (d > max)
max = d;
else if (d < min)
min = d;
printf("max: %d min : %d\n", max, min);
return 0;
但是,仍然不能满足使用4个if
语句的要求。我想知道我是否可以进一步缩短我的代码。请原谅这个问题的基本性质。任何建议都将不胜感激。
6条答案
按热度按时间zxlwwiss1#
我们可以用分治的方法来解决这个问题。
想象我们的输入= [a,B,c,d]
我们想从[a,B]和[c,d]中找到答案
然后合并最后的解决方案以找到答案。
附加(如何在C语言中交换数字)
3b6akqbq2#
下面应该工作。
它使用前2个
if
来计算max1 = max(a, b)
和max2 = max(c, d)
,以及min1 = min(a, b)
和min2 = min(c, d)
。则最大值等于
max(max(a, b), max(c, d)) = max(max1, max2)
(第三个if
)。最小值等于
min(min(a, b), min(c, d)) = min(min1, min2)
(第四个if
)。奖金
零
if
秒。vvppvyoh3#
olmpazwi4#
5w9g7ksd5#
下面是使用单个
if
语句的替代解决方案:gc0ot86w6#
这是一个很有创造性的问题。我只用了两个if语句就解决了你的问题。