南邮OJ 1013 判断三角形
2015-10-15 09:42
369 查看
题目描述:给定三条边的长度,判断能否组成三角形,如果可以,判断三角形的形状。
题目链接:点击打开链接
这是我个人写的代码,怎么提交都不行,后来看到别人的代码顿时觉得自己真的是太low了。思想都没有搞清楚!
首先思想上的分析:第一,考虑三条边都是相等的,即为等边三角形。第二,有两条边相等的,即为等腰三角形。如果有两边相等且构成直角三角形的,即为等腰直角三角形。第三,当三条边都不相等时,考虑是否可以构成直角三角形。第四,剩下来的就是一般的三角形了。当然前提是要能构成三角形!
另外题目的精确度,之前没有考虑到,一直以为没有用的,后来看到别人的代码才知道是有用的!将一些关系进行转换,用于精确度。本题中的精确度精度为0.0001,如果是0.00001的话提交会有错误!
题目链接:点击打开链接
<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的话提交会有错误!
相关文章推荐
- ARC
- 检测单向链表是否存在环
- windows 与 GUI 交互
- 论文快速读懂的方法总结1
- poj1664-放苹果(递归)
- JS 初学正则表达式
- Java中的回调函数问题
- 背景文字或者背景图片右对齐
- css让背景图片拉伸填充的属性
- Android SDK Manager 更新代理配置
- 读《写给大家看的色彩书1》.设计配色基础1
- 关于Android真机调试
- WebSockets VS Server-Sent Events VS Long-polling
- POJ2250 Compromise(dp)
- EasyUI DataGrid 实用例子(2015-05-22)
- Linux发展
- mongodb数组与内嵌文档查询
- 数据库设计的完整性约束表现在哪些方面
- Html关于日历控件的制作
- IOS开发之不同版本适配问题3(#ifdef __IPHONE_7_0 BaseSDK Development Target)