当前位置: 代码迷 >> 综合 >> xtu oj Problem B 1400 钝角三角形
  详细解决方案

xtu oj Problem B 1400 钝角三角形

热度:64   发布时间:2023-12-04 23:44:37.0

钝角三角形

题目描述

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));}}
}

和之前那个锐角三角形很相似

  相关解决方案