TOPIC

Aparentemente a questão está bugada. WA 25%

Pedro Feitosa asked 3 months ago

Não tem como ser erro de precisão pois estou guardando os pesos como inteiros e nao como float;

Se a entrada é: 5.4, 2.7, 1.2, 1.5 Eu guardo os valores: 54, 27, 12, 15

#include <iostream>
#include <vector>

using namespace std;

int main() {

    float aux;
    vector <int> pesos(4);
    int metade = 0;
    bool teste = false;

    for (int i = 0; i < 4; i++) 
    {
        scanf ("%f", &aux);

        pesos[i] = aux * 10;
        metade += pesos[i];
    }

    metade = metade/2;

    for (int d: pesos) 
    {
        if (d == metade) teste = true;
    }

    for (int i = 0; i < 4; i++) 
    {
        for (int j = 0; j < 4; j++)
        {
            if (j != i)
            {
                if ((pesos[i] + pesos[j]) == metade) teste = true;
            }
        }
    }   

    if (teste) cout << "YES\n";
    else cout << "NO\n";

    return 0;
}
MOD

Remember not post solutions. Your post may be reviewed by our moderators.

  • feodorv replied 3 months ago

    Hm. It seems to me that it's a precision error also. You can use

    int getnum()
    {
      int a, b;
      switch( scanf( "%d.%d", &a, &b) )
      {
        case 1: return 10*a;
        case 2: return 10*a+b;
      }
      return 0;
    }

    Also metade can be odd:

    metade = metade/2;

    So metade/2 is not the correct value:

    if( metade % 2 == 0 )
    {
        metade = metade/2;
    
        for (int d: pesos) 
        {
            if (d == metade) teste = true;
        }
       ...
    }