先看题目:定义一个Triangle三角形类,包括数据成员三边边长(int类型)、判断三角形形状的成员函数。键盘输入三角形三边边长,判断此三角形形状(其中,等腰直角三角形归为等腰三角形类)。 构成等边三角形,输出“A equileteral triangle”; 构成等腰三角形,输出“A isosceles triangle”; 构成直角三角形,输出“A right triangle”; 构成三角形,但不是以上三种,则输出“A triangle”; 不构成,输出“Not a triangle”。
其实就是和那个if-else的类型但是要求要用类来做那我们就用类吧。
这个题目干预我写完的原因是 if-else语句里面,他是逐行逐行的进行判断,所以对三角形的分类标准需要思考思考。
一开始先想应该先判断是不是三角形然后再开始细分,但是要是三角形的话直接就输出来了,所以这个应该放在最后判断。
然后就从等边--等腰--直角--三角形--非三角,就好了
好像又和类没啥关系,离谱
然后为了方便判断,就先给三个边进行一些冒泡排序,方便按照边长判断形状
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cassert>
#include<iomanip>//控制精度的,以及各种格式
#include<math.h>//各种数学公式
#include<locale>
//很多头文件都是我一块用的就没删,有些也不是必须
using namespace std;
class Triangle {
public:
int a, b, c;
string predict() {
int a1[3] = { a,b,c };
for (int i = 0; i < 3-1;i++) {
for (int j = 0; j < 3 - 1 - i; j++) {
if (a1[j]>a1[j+1]) {
int temp = a1[j];
a1[j] = a1[j + 1];
a1[j + 1] = temp;
}
}
}
//先判断是不是三角形
if(a1[0]+a1[1]<=a1[2]){
string i = "Not a triangle";
return i;
}
else {
if (a1[0] == a1[1] && a1[1] == a1[2]) {
string i = "A equileteral triangle";
return i;
}
else if (a1[0] == a1[1] || a1[1] == a1[2]) {
string i = "A isosceles triangle";
return i;
}
else if (a1[0] * a1[0] + a1[1] * a1[1] == a1[2] * a1[2]) {
string i = "A right triangle";
return i;
}
else{
string i = "A triangle";
return i;
}
}
}
};
int main() {
Triangle b1;
cin >> b1.a >> b1.b >> b1.c;
cout << b1.predict();
}
呃呃大概就是这样,思路要是不好不要来骂我,我就是给我的作业和我的想法存个档。
如果你有更优解,欢迎告诉我!