Witam,
jestem na etapie 'walki' z zadaniem, które niby jest banalne, a jednak SPOJ wyrzuca mi "błędna odpowiedź".
Wszystko zwraca tak jak powinno, nie potrafię znaleźć takich prędkości z zakresu <1, 10000>, aby program niepoprawnie obliczył mi prędkość średnią.
Czy ktoś może ma pomysł dlaczego?
#include<iostream>
using namespace std;
int main()
{
unsigned int t, v1, v2, srednia;
cin >> t;
for(int i=0; i<t; i++)
{
cin >> v1 >> v2;
srednia = (2*v1*v2)/(v1+v2);
cout << srednia;
}
return 0;
}
Pozdrawiam.
int
taki właśnie (w założeniu) jest. Ponieważshort int
może być mniejszy niżint
operowanie na nim może wymagać dodatkowych instrukcji. W C i C++ typy mniejsze niżint
są promowane podczas operacji matematycznych, ale potem może zajść potrzeba konwersji do typu mniejszego - to dodatkowa operacja. Oczywiście czasami tak ma właśnie być i jest to porządane, natomiast w ogólnym przypadku raczej nie jest to potrzebne. Zobacz: http://goo.gl/CBFoVRshort int
trzeba czasem pominąć część słowa przy pomocy operacji bitowych (przez co tracimy cykle).