您的位置:首页 > 其它

南邮OJ 1013 判断三角形

2015-10-15 09:42 369 查看
题目描述:给定三条边的长度,判断能否组成三角形,如果可以,判断三角形的形状。

题目链接:点击打开链接

<span style="font-family:SimSun;font-size:14px;">#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a[3]={};
cin >> a[0] >> a[1] >> a[2];
while ((a[0] !=0 )||(a[1]!=0)||(a[2]!=0))
{
if ((a[0]+a[1] > a[2])&&(a[2]+a[1] > a[0])&&(a[2]+a[1] > a[0]))
{
if ((((a[0]==a[1])&&(a[0]!=a[2]))||((a[0]==a[2])&&(a[0]!=a[1]))||((a[2]==a[1])&&(a[1]!=a[0])))
&& ((fabs(a[0]*a[0]-a[1]*a[1]-a[2]*a[2])<0.001)||(fabs(a[1]*a[1]-a[0]*a[0]-a[2]*a[2])<0.001)
||(fabs(a[2]*a[2]-a[1]*a[1]-a[0]*a[0])<0.001)))
{
cout << "“Isosceles right triangle”" << endl;
}
else  if ((fabs(a[0]*a[0]-a[1]*a[1]-a[2]*a[2])<0.001)||(fabs(a[1]*a[1]-a[0]*a[0]-a[2]*a[2])<0.001)
||(fabs(a[2]*a[2]-a[1]*a[1]-a[0]*a[0])<0.001))
{
cout << "“Right triangle”" << endl;
}
else  if (((a[0]==a[1])&&(a[0]!=a[2]))||((a[0]==a[2])&&(a[0]!=a[1]))||((a[2]==a[1])&&(a[1]!=a[0])))
{
cout << "“Isosceles triangle”" << endl;
}
else  if ((a[0]==a[1])&&(a[1]==a[2]))
{
cout << "“Equilateral triangle”" <<endl;
}
else
{
cout << "“General triangle”" << endl;
}
}
else
{
cout << "“Not a triangle”" << endl;
}
cin >> a[0] >> a[1] >> a[2];
}
cout << "End"  << endl;
return 0;
}</span>


这是我个人写的代码,怎么提交都不行,后来看到别人的代码顿时觉得自己真的是太low了。思想都没有搞清楚!

<span style="font-family:SimSun;font-size:14px;">#include<iostream>
#include<cmath>
using namespace std;
int main()
{
float a,b,c;
cin>>a>>b>>c;
while((a!=0)&&(b!=0)&&(c!=0))
{
if((a+b-c>=0.001)&&(b+c-a>=0.001)&&(c+a-b>=0.001))
{
if((fabs(a-b)<0.001)&&(fabs(a-c)<0.001))
cout<<"Equilateral triangle"<<endl;
else{
if((fabs(a-b)<0.001)||(fabs(b-c)<0.001)||(fabs(a-c)<0.001))
{
if((fabs(a*a-b*b-c*c)<0.001)||(fabs(b*b-a*a-c*c)<0.001)||(fabs(c*c-a*a-b*b)<0.001))
cout<<"Isosceles right triangle"<<endl;
else
cout<<"Isosceles triangle"<<endl;
}
else
{
if((fabs(a*a-b*b-c*c)<0.0001)||(fabs(b*b-a*a-c*c)<0.0001)||(fabs(c*c-a*a-b*b)<0.0001))
cout<<"Right triangle"<<endl;
else
cout<<"General triangle"<<endl;
}
}
}
else
cout<<"Not a triangle"<<endl;
cin>>a>>b>>c;
}
cout<<"End"<<endl;
return 0;
}</span>

首先思想上的分析:第一,考虑三条边都是相等的,即为等边三角形。第二,有两条边相等的,即为等腰三角形。如果有两边相等且构成直角三角形的,即为等腰直角三角形。第三,当三条边都不相等时,考虑是否可以构成直角三角形。第四,剩下来的就是一般的三角形了。当然前提是要能构成三角形!

另外题目的精确度,之前没有考虑到,一直以为没有用的,后来看到别人的代码才知道是有用的!将一些关系进行转换,用于精确度。本题中的精确度精度为0.0001,如果是0.00001的话提交会有错误!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: