读书人

小弟我是菜鸟 这道题如何编

发布时间: 2012-02-12 17:16:34 作者: rapoo

我是初学者 这道题怎么编啊
已知三角形ABC中各顶点坐标Xa,Ya,Xb,Yb,Xc,Yc均属于集合{0,1,2,...,17,18},求三角形面积的集合Sabc中元素的个数。
想不出来了。。。


[解决办法]
顶着感冒写了个全的,早点给分安慰一下我把。
#include <iostream>
#include <math.h>
#include <vector>
#include <set>
using namespace std;

typedef struct point{
int x;
int y;
point(){}
point(int xx,int yy):x(xx),y(yy){}
bool operator == (const point& otherPoint) const{
if((x==otherPoint.x)&&(y==otherPoint.y))
return true;
else return false;
}
}point;

typedef struct line{
point pt1;
point pt2;
float length;
line(){}
line(const point& p1,const point& p2):pt1(p1),pt2(p2){
length = sqrt((pt1.x-pt2.x)*(pt1.x-pt2.x)+(pt1.y-pt2.y)*(pt1.y-pt2.y));
}
}line;

ostream& operator < < (ostream& os,const point& pt){
os < <pt.x < < ", " < <pt.y;
return os;
}

typedef struct trangle{
point pt1;
point pt2;
point pt3;
float s;
trangle(){}
trangle(const point& p1,const point& p2,const point& p3):pt1(p1),pt2(p2),pt3(p3){
line line1(pt1,pt2);
line line2(pt1,pt3);
line line3(pt2,pt3);
float l = line1.length+line2.length+line3.length;
s = sqrt(l*(l-line1.length)*(l-line2.length)*(l-line2.length));
}
}trangle;

ostream& operator < < (ostream& os,const trangle& tr){
os < <tr.pt1 < < " " < <tr.pt2 < < " " < <tr.pt3 < < "面积: " < <tr.s;
return os;
}

bool canBeTrangle(const point& pt1,const point& pt2,const point& pt3){
if((pt1 == pt2)||(pt1 == pt3)||(pt2 == pt3))
return false;

if((!(pt3.x-pt2.x))||(!(pt1.x-pt2.x))){
if(pt3.x-pt2.x == pt1.x-pt2.x)
return false;
else return true;
}

if(((pt3.y-pt2.y)/(pt3.x-pt2.x)) != ((pt1.y-pt2.y)/(pt1.x-pt2.x)))
return true;
else return false;
}

void main(){
int pos[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
vector <point> pointVec;

for(int i = 0;i <18;i++){
for(int j = 0;j <18;j++){
pointVec.push_back(point(pos[i],pos[j]));
}
}

set <float> sSet;
for(vector <point> ::iterator iter1=pointVec.begin();iter1!=pointVec.end();iter1++){
for(vector <point> ::iterator iter2 = iter1+1;iter2!=pointVec.end();iter2++){
for(vector <point> ::iterator iter3= iter2+1;iter3!=pointVec.end();iter3++){
if(canBeTrangle(*iter1,*iter2,*iter3)){
sSet.insert(trangle(*iter1,*iter2,*iter3).s);
}
}
}
}
}

读书人网 >C++

热点推荐