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

У меня есть программа, которая определяет, является ли треугольник тупой треугольник. Программа инструктирует пользователя ввести 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";
}
}

-2

Решение

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]