1013 - O Maior

Descrição

Solução

Uma forma de conseguir o maior de três elementos usando uma função que só aceita dois elementos é fazer uma composição da seguinte forma:

max(a,max(b,c))max(a, max(b, c))

Com isso, o max(b, c) de dentro vai ser executado primeiro, trazendo o maior entre os números b e c; e depois vai ser executado o max de fora, onde vai ser escolhido o máximo entre a e o máximo escolhido entre b e c antes.

Por que a fórmula funciona?

Considere que a é o maior número e b é o menor, temos que

max(a,b)=a+b+abs(ab)2max(a,b)=a+b+ab2max(a,b)=2a2max(a,b)=amax(a, b) = \frac{a + b + abs(a - b)}{2} \\ \text{}\\ max(a, b) = \frac{a + b + a - b}{2} \\ \text{}\\ max(a, b) = \frac{2a}{2} \\ \text{}\\ max(a, b) = a

como queríamos demonstrar.

#include <stdio.h>
#include <stdlib.h>

int maior(int a, int b){
    return (a + b + abs(a - b))/2;
}

int main(){
    int a, b, c, resposta;

    scanf("%d %d %d", &a, &b, &c);
    
    resposta = maior(a, maior(b, c));

    printf("%d eh o maior\n", resposta);

    return 0;
}

Last updated