我有一个程序可以确定三角形是否是钝角三角形。程序指示用户输入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";
}
}
答案 0 :(得分:0)
如果不运行探查器,您只能真正衡量您执行的昂贵操作的效率。在你的情况下,“pow”是唯一真正昂贵的操作。
鉴于两种解决方案只为x(s1,s2,s3)的每个值计算一次pow(x,2),它们同样有效。
“如果”语句和比较(“最大”功能)便宜,并不值得担心。
这两种解决方案在功能上是相同的。