HPU-- 1190 確率

题目描述

话说当年语文考满分的你认识标题第一个字吗?

 

HPU有很多内湖,湖里面放养了很多金鱼(还有黑白天鹅?),每天都会有很多小伙伴在湖边看金鱼在水中嬉戏(黑白天鹅打架?)。

Ocean是一个善于思考的好孩子,今天他给你出了一道题目:
假设湖中一共有$N$条金鱼,现在Ocean随机挑出两条金鱼,问这两条金鱼颜色不同的概率?

为了降低题目难度,Ocean认为金鱼只会有$6$种不同的颜色,即$1,2,3,4,5,6。$

PS:在挑出来第二条鱼之前,Ocean是不会将第一条鱼放入湖中的。

输入

第一行输入一个整数$T$,代表有$T$组测试数据。
每组数据占两行,第一行输入一个整数$N$代表上面提到的信息。
下面一行输入$N$个整数$color_i$,代表第$i$条金鱼的颜色。
当$color_i = 1$,代表第$i$条金鱼的颜色为$1$,其它依次类推。

注:$1 <= T <= 100,2 <= N <= 100,1 <= color_i <= 6。$

输出

对每组测试数据,输出一个浮点数代表最后的结果,要求保留两位小数。

样例输入

2
4
1 1 2 2
2
2 2

样例输出

0.67
0.00
思路:1-相同颜色的概率;
代码:
 1 #include<cstdio>
 2 #include<cstring>
 3 int jiecheng(int x)
 4 {
 5     if(x==1)
 6         return 1;
 7     return x*jiecheng(x-1);    
 8 }
 9 int main()
10 {
11     int t,n,a[105],b[6];
12     scanf("%d",&t);
13     while(t--)
14     {
15         memset(b,0,sizeof(b));
16         scanf("%d",&n);
17         for(int i=0;i<n;i++)
18         {
19             scanf("%d",&a[i]);
20             if(a[i]==1) b[0]++;
21             if(a[i]==2) b[1]++;
22             if(a[i]==3) b[2]++;
23             if(a[i]==4) b[3]++;
24             if(a[i]==5) b[4]++;
25             if(a[i]==6) b[5]++;    
26         }
27         int sum=0;
28         for(int i=0;i<6;i++)   
29         {
30             if(b[i]>=2)        //同种颜色,鱼的个数大于等于2,从中取2条计算概率,然后求和 
31                 sum+=(b[i]*(b[i]-1))/2;
32         }
33         double m=n*(n-1)/2;   //总鱼中随机取2条的概率        
34         printf("%.2lf\n",1-(double)(sum)/m);    
35             
36     }
37     return 0;
38 }

 

posted @ 2017-08-16 10:55  ⊙∽⊙Perseverance  阅读(160)  评论(0编辑  收藏  举报