-1

我有一个程序可以确定三角形是否为钝角三角形。程序指示用户输入 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";
    }
}
4

1 回答 1

0

如果不运行分析器,您只能真正衡量您正在执行多少昂贵操作的效率。在您的情况下,“pow”是唯一真正昂贵的操作。

鉴于这两种解决方案只为 x (s1, s2, s3) 的每个值计算一次 pow(x, 2),它们同样有效。

“If”语句和比较(“max”函数)很便宜,并不值得担心。

这两种解决方案在功能上是相同的。

于 2017-10-31T22:34:01.937 回答