确定三个边长是否形成钝角三角形c ++

时间:2017-10-31 21:35:27

标签: c++ performance if-statement pythagorean

我有一个程序可以确定三角形是否是钝角三角形。程序指示用户输入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 个答案:

答案 0 :(得分:0)

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

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

“如果”语句和比较(“最大”功能)便宜,并不值得担心。

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