Edward 对等腰三角形情有独钟,据说他能在 0.0001s 内判断出一个图形是否是等腰三角形!但是,这还不能满足 Edward,最近,他又研究出来一种等腰三角形的新玩法。他随意收集了 5 根木棍,然后想要尽快计算出,使用这 5 根木棍能组成多少种不同的等腰三角形。但是这对他来说太难了,你能帮助他吗?
每根木棍在使用时不能弯折,但可以弃置不用。三角形的每条边可以由一根或多根木棍拼接而成。
一个整数 T,表示有多少组测试数据。
对于每组测试数据,给出 5 个不超过 100 的正整数,代表选出的 5 根木棒的长度。
输出能组成的不同等腰三角形的个数。
2
1 1 1 1 1
1 1 1 1 2
2
3
#include<stdio.h> int a[10],s[10],v[10],xx[10],yy[10]; int ans; void check() { int x,y,flag,i; if (s[1]==s[2]) x=s[1],y=s[3]; else if (s[1]==s[3]) x=s[1],y=s[2]; else if (s[2]==s[3]) x=s[2],y=s[1]; else return; if (x && y && 2*x>y) { flag=1; for (i=1;i<=ans;i++) if (xx[i]==x && yy[i]==y) { flag=0; break; } if (flag) { ans++; xx[ans]=x; yy[ans]=y; } } } void dfs(int dep) { int i; if (dep>3) { check(); return; } dfs(dep+1); for (i=1;i<=5;i++) if (!v[i]) { v[i]=1; s[dep]+=a[i]; dfs(dep); s[dep]-=a[i]; v[i]=0; } } int main() { int tt,i; scanf("%d",&tt); while (tt--) { for (i=1;i<=5;i++) scanf("%d",a+i); ans=0; dfs(1); printf("%d\n",ans); } }