南邮OJ 1013 判断三角形

来源:互联网 发布:mac星球基地中文版 编辑:程序博客网 时间:2024/04/29 13:06

题目描述给定三条边的长度,判断能否组成三角形,如果可以,判断三角形的形状。

题目链接:点击打开链接

<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;   elsecout<<"General triangle"<<endl;}      }   }elsecout<<"Not a triangle"<<endl;cin>>a>>b>>c;}cout<<"End"<<endl;return 0;}</span>

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

       另外题目的精确度,之前没有考虑到,一直以为没有用的,后来看到别人的代码才知道是有用的!将一些关系进行转换,用于精确度。本题中的精确度精度为0.0001,如果是0.00001的话提交会有错误!


0 0