钝角三角形
题目描述
n条边,任选3条边,能组成钝角三角形的概率(选的边不同就认为是不同的三角形)?
输入格式
第一个是一个整数T(1≤T≤1000),表示样例的个数。
每个样例占2行,第一行是一个整数n,3≤n≤100,表示边数。 第二行是n个整数ai,1≤ai≤100,表示边的长度。
输出格式
依次每行输出一个样例的结果,如果概率为0或者1,输出0或者1;否则输出一个真分数a/b。
样例输入
3 4 1 2 3 4 3 1 2 3 3 2 2 3
样例输出
1/4 0 1
#include<stdio.h>
int f(int a,int b)
{while(a%b!=0){int c=b;b=a%b;a=c;}return b;
}
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int a[101],i,j=0,k,cnt=0;for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n-1;i++){for(j=0;j<n-i-1;j++){if(a[j]>a[j+1]){k=a[j+1];a[j+1]=a[j];a[j]=k;}}}for(i=0;i<=n-3;i++){for(j=i+1;j<=n-2;j++){for(k=j+1;k<=n-1;k++){if(a[i]+a[j]>a[k]){if(a[i]*a[i]+a[j]*a[j]<a[k]*a[k]){cnt++;}}}}}cnt=cnt*6;int m=n*(n-1)*(n-2);if(cnt==0) printf("0\n");else if(cnt==m) printf("1\n");else{int c=cnt,d=m;printf("%d/%d\n",cnt/f(c,d),m/f(c,d));}}
}
和之前那个锐角三角形很相似