主题:编程计算下一个图形包含多少三角形。
思路:首先,在图中各线段的交点处标注字母。 两个文字并不构成一条直线,而是使用穷举法列出所有直线。
然后,将图中的所有线段组合成任意三条。 如果这三条线段可以构成三角形,计数就会加1。 否则,计数不会改变。
要确定直线是否可以构成三角形,必须注意两条直线之间是否有交点,三条直线是否共线,三条直线是否有相同的交点。
#include 'stdio.h '
#define NO_POINT '0'
char * map[]={'ab ',' ad ',' db ',' ag ',' gc ',' ac ',' ae ',' ej ',' jh ',
" aj "、" eh "、" af "、" ak "、" ai "、" fk "、" fi "、" ki "、" de "、" df "、" dg "、" ef "、" eg "、
' fg '、' bj '、' bk '、' bg '、' jk '、' jg '、' kg '、' bh '、' bc '、' hi '、' hc '、' ic'};
char *line[]={'adb '、' agc '、' aejh '、' afki '、' defg '、' bjkg '、' bhic'};
intcontains(char*str,char a ) {
int i=0;
wile(str[I]!=0}{
if(str[I]==a ) {
返回1;
}
I;
}
返回0;
}
intisinaline(chara、char b、char c ) {
int i=0;
for(I=0; i7; I ) {
if(contains(line[I],a )==1
contains(line[I],b )==1
contains(line[I],c )==1) {
返回1;
}
}
返回0;
}
chargetcrosspoint(char*S1,char *s2 ) {
if(S1==) S2 ) {
return *s1;
}
if () S1==* ) S21 ) }{
return *s1;
}
if(* ) S1 )==*s2
return *s2;
}
if(* ) S1 )==* ) S21 ) }{
返回* (s1);
}
return NO_POINT;
}
intistriangle(char*str1、char *str2和char * str3) )
char p1、p2、p3;
P1=getcrosspoint(str1,str2);
if(P1==no_point ) return 0;
P2=getcrosspoint(str2,str3);
if(P2==no_point ) return 0;
P3=getcrosspoint(str1,str3);
if(P3==no_point ) return 0;
if(p1!=p2 p2!=p3 p1!=p3
isinaline(P1,p2,p3 )==0) ) )
//printf () (%c,%c ) )、p1、p2、p3 );
返回1;
}
返回0;
}
输入获取计数
int i,j,k;
int count=0;
for(I=0; i36; I ) {
for(j=I1; j36; j ) {
for(k=j1; k36; k ) {
if(istriangle(map[I],map[j],map[k] ) )
出局;
}
}
}
}
返回计数;
}
主()。
打印(it contains % dtriangle (n ),getTriangleCount ) );
getchar (;
}