Определите, образуют ли три стороны длины тупой треугольник с ++

У меня есть программа, которая определяет, является ли треугольник тупой треугольник. Программа инструктирует пользователя ввести 3 значения длины стороны (s1,s2,s3). Если квадратное значение меньших двух значений длины стороны меньше квадратного значения наибольшего значения стороны, то это тупой треугольник.

Например:

s1 = 3, s2 = 5, s3 = 9

3 ^ 2 + 5 ^ 2 <9 ^ 2

34 <81

Это тупой треугольник.

У меня есть две версии моей программы, показанные ниже, и обе дают одинаковый вывод. Мой вопрос, какой из них более эффективен? или есть другая версия, которая более эффективна, чем две мои версии?

Версия 1:

double s1,s2,s3;
cout << "Enter three numbers -> ";
cin >> s1 >> s2 >> s3;
if (max(max(s1,s2),s3) == s1){
    if(pow(s2,2)+pow(s3,2) < pow(s1,2)){
        cout << "This is an obtuse triangle";
    } else {
        cout << "Not an obtuse triangle";
    }
} else if (max(max(s1,s2),s3) == s2){
    if(pow(s1,2)+pow(s3,2) < pow(s2,2)){
        cout << "This is an obtuse triangle";
    } else {
        cout << "Not an obtuse triangle";
    }
} else {
    if(pow(s1,2)+pow(s2,2) < pow(s3,2)){
        cout << "This is an obtuse triangle";
    } else {
        cout << "Not an obtuse triangle";
    }
}

Версия 2:

double s1,s2,s3;
cout << "Enter three numbers -> ";
cin >> s1 >> s2 >> s3;
if( max(s1,s2) < s3){
    if(pow(s1,2) + pow(s2,2) < pow(s3,2)){
        cout << "This is an obtuse triangle";
    } else {
        cout << "Not an obtuse triangle";
    }
} else {
    if(pow(min(s1,s2),2) + pow(s3,2) < pow(max(s1,s2),2)){
        cout << "This is an obtuse triangle";
    } else {
        cout << "Not an obtuse triangle";
    }
}

1 ответ

Без использования профилировщика вы можете реально оценить эффективность того, сколько дорогостоящих операций вы выполняете. В вашем случае "пау" - единственная действительно дорогая операция.

Поскольку оба решения вычисляют pow(x, 2) только один раз для каждого значения x (s1, s2, s3), они одинаково эффективны.

Операторы "if" и сравнения (функция "max") дешевы, и о них не стоит беспокоиться.

Два решения функционально одинаковы.

Другие вопросы по тегам