C 仅使用4';如果';语句-查找4个整数中的最大值和最小值

C 仅使用4';如果';语句-查找4个整数中的最大值和最小值,c,if-statement,C,If Statement,我已经完成了一本推荐初学者书中的一些基本练习: 问题是:使用尽可能少的if语句来确定用户输入的四个数字中的最大值和最小值四条if语句就足够了。——因为这个问题是在本书中涉及循环、数组和函数之前提出的,所以我认为不应该使用这些语句 此外,我知道有一个类似的一个,但没有一个符合我所要达到的要求 仅使用4个if语句 没有循环 我想到的第一件事是使用逻辑或运算符,但是如下所示,使用了八个if语句。此外,此方法非常长且效率不高: int a, b, c, d; printf("Enter 4 i

我已经完成了一本推荐初学者书中的一些基本练习:

问题是:使用尽可能少的if语句来确定用户输入的四个数字中的最大值和最小值四条if语句就足够了。——因为这个问题是在本书中涉及循环、数组和函数之前提出的,所以我认为不应该使用这些语句

此外,我知道有一个类似的一个,但没有一个符合我所要达到的要求

  • 仅使用4个if语句
  • 没有循环
  • 我想到的第一件事是使用逻辑
    运算符,但是如下所示,使用了八个
    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;
    
    inta、b、c、d;
    printf(“输入4个整数以查找最大和最小:”);
    扫描(“%d%d%d%d”、&a、&b、&c、&d);
    如果(a>b&&a>c&&a>d)
    printf(“最大:%d\n”,a);
    如果(b>a&&b>c&&b>d)
    printf(“最大:%d\n”,b);
    如果(c>a&&c>b&&c>d)
    printf(“最大:%d\n”,c);
    如果(d>a&&d>a&&d>c)
    printf(“最大:%d\n”,d);
    如果(a
    接下来,我继续编写以下代码,这将是一个更好的解决方案:

        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;
    
    inta、b、c、d;
    printf(“输入4个整数以查找最大和最小:”);
    扫描(“%d%d%d%d”、&a、&b、&c、&d);
    int max=a,min=a;
    如果(b>最大值)
    max=b;
    否则如果(b最大值)
    max=c;
    否则如果(c最大值)
    max=d;
    否则,如果(d
    但是,仍然不符合使用4
    if
    语句的要求。我想知道我是否可以进一步缩短我的代码。请原谅这个问题的基本性质。如果您有任何建议,我们将不胜感激。

    以下建议应该有效

    它计算
    max1=max(a,b)
    max2=max(c,d)
    ,以及
    min1=min(a,b)
    min2=min(c,d)
    ,使用前两个
    if
    s

    int a, b, c, d;
    
    // ...
    
    int min = a, max = a;
    b < min && (min = b);
    c < min && (min = c);
    d < min && (min = d);
    b > max && (max = b);
    c > max && (max = c);
    d > max && (max = d);
    
    然后最大值等于
    max(max(a,b),max(c,d))=max(max1,max2)
    。(第三个
    如果

    最小值等于
    min(min(a,b),min(c,d))=min(min1,min2)
    。(第四个
    如果


    我们可以用分而治之的方法来解决这个问题

    想象一下我们的输入=[a,b,c,d]

    我们想从[a,b]和[c,d]中找到答案

    然后合并最终的解决方案以找到答案

    if(a > b) swap(&a,&b); // solve [a,b]
    if(c > d) swap(&c,&d); // solve [c,d]
    if(a > c) swap(&a,&c); // find minimum from [a,b] and [c,d]
    if(d > b) swap(&b,&d); // find maximum from [a,b] and [c,d]
    
    // a will store the minimum value.
    // b will store the maximum value.
    
    奖金(如何用C语言交换号码)


    这是一个很有创意的问题。我只用了两条if语句就解决了你的问题

    int a = 22, b = 25, c = 100, d = 4;
            int max = 0, min = 0;
            if ((a > b ? (a > c ? (a > d ? max = a : max = d) : max = c) : (b > c ? (b > d ? max = b : max = d) : max = c)) == 1)
            {
                  //Control never goes inside this loop
            }
            else if ((a < b ? (a < c ? (a < d ? min= a : min= d) : min= c) : (b < c ? (b < d ? min = b : min = d) : min = c)) == 1)
            {
                 //Control never goes inside this loop
            }
            printf("Maximum Value is:%d and Minimum Value is: %d", max, min);//at this statement max and min will have appropriate values
    
    inta=22,b=25,c=100,d=4;
    int max=0,min=0;
    如果((a>b?(a>c?(a>d?max=a:max=d):max=c):(b>c?(b>d?max=b:max=d):max=c))=1)
    {
    //控制永远不会进入这个循环
    }
    否则如果((a
    #包括
    int max_of_four(int a,int b,int c,int d)
    {
    int max=0;
    max=(a>b?(a>c?(a>d?a:d):(c>d?c:d):(b>c?(b>d?b:d>c?d:c):c>d?c:d);
    返回最大值;
    }
    int main(){
    INTA、b、c、d;
    scanf(“%d%d%d%d”、&a、&b、&c、&d);
    int ans=四(a,b,c,d)中的最大值;
    printf(“%d”,ans);
    返回0;
    }
    
    顺便说一句,如果
    为零,即使没有
    ,也可以这样做:
    ,仅使用
    &&
    |
    。是的,我知道使用条件表达式可以解决这一问题,如果s。但是,该要求规定我使用
    if
    语句来实现结果。(4就足够了)只有
    如果
    ,那么没有其他或者如果?虽然我不知道它是否有帮助(我还没有给出太多),但是如果
    a>b&&b>c
    ,那么
    a>c
    @Stefan,
    如果
    可以使用,但是,如果我错了,请纠正我,
    else if
    也被视为if语句。因此,在我的上一个解决方案中,我使用了6条if语句。这个练习是为读者设置分而治之的排序技术,如快速排序。“零如果”是作弊,
    cond&&expression
    是一个
    if
    。这个问题最好用“仅使用4个比较”来表达。这个解决方案是否比我提出的第二个更有效,因为它的if语句更少?@Rizzo:是的,HolyBlackCat的第一个示例比你提出的更有效。局部临时变量“便宜”;编译器通常可以对它们进行优化(即,只将它们保存在寄存器中)。wikipedia页面可能会阐明这样解决问题的想法。将问题分解和绘图是一个非常有用的设计技术,可以考虑学习,一般来说解决问题。<代码>交换<代码>存在于C++中,但不在C中,不能以C的方式实现,这样就可以用它来调用它。但如果这是一个伪代码,那也没关系,在这种情况下,它只会有助于指出,您意识到位丢失了。是的,我知道。我认为他可以很容易地编写swap(a,b)函数。我将编辑我的原始解决方案。@algojava:The
    swap(a,b)<
    
    void swap(int *a,int *b) {
        int c = *a;
        *a = *b;
        *b = c;
    }
    
    int a = 22, b = 25, c = 100, d = 4;
            int max = 0, min = 0;
            if ((a > b ? (a > c ? (a > d ? max = a : max = d) : max = c) : (b > c ? (b > d ? max = b : max = d) : max = c)) == 1)
            {
                  //Control never goes inside this loop
            }
            else if ((a < b ? (a < c ? (a < d ? min= a : min= d) : min= c) : (b < c ? (b < d ? min = b : min = d) : min = c)) == 1)
            {
                 //Control never goes inside this loop
            }
            printf("Maximum Value is:%d and Minimum Value is: %d", max, min);//at this statement max and min will have appropriate values
    
    #include <stdio.h>
    
    int max_of_four(int a,int b, int c, int d)
    {
        int max=0;
        max = (a > b ? (a > c ? (a > d ?   a :  d) :  (c > d ? c : d) ) : (b > c ? (b > d ? b : d>c? d : c ) : c>d? c : d)) ;
    
       return max;
    }
    
    int main() {
        int a, b, c, d;
        scanf("%d %d %d %d", &a, &b, &c, &d);
        int ans = max_of_four(a, b, c, d);
        printf("%d", ans);
    
        return 0;
    }