西安电子科技大学第16届程序设计竞赛网络同步赛 另一个另一个简单游戏
链接:https://www.nowcoder.com/acm/contest/107/D
来源:牛客网
题目描述
现在有n个数,每次随机取出两个数x,y,然后加入一个数为(x+y)/2,问最后剩下的那个数的期望是多少?
输入描述:
有多组输入数据,第一行为一个数字T,代表有T组输入数据 (0<T≤20)。 接下来为T组数据。 每组测试数据分2行: 第一行为n,表示有n个数(1≤n≤100) 接下来的一行有n个正整数ai,表示初始的n个数(1≤ai≤10000,1≤i≤n)。
输出描述:
对于每组数据,在一行上输出最后剩下数的期望值的整数部分。
示例1
输入
2 3 1 1 1 2 2 3
输出
1 2
现有数字a,b,c.那么abc的平均值为(a+b+c)/3;
取出两个数,只有可能三种情况,ab,ac,bc;
这三种情况,每一种的概率是相等的;
而每种情况的平均值分别为((a+b)/2+c)/3,((a+c)/2+b)/3,((b+c)/2+a)/3; //如果看不清楚请手动模拟啊
而对于新数列,肯定也有一个平均值,我们假设d=((a+b)/2+c)/3,那么对于第一种情况,平均值就是(d+c)/2;
刚刚说过,每种情况的概率相等,也就是说,对于新的三个数列,平均值的期望可以很容易算出,就是把三个数列的平均值加起来除以三;
经过计算,很容易得出,新数列平均值的期望,就是(a+b+c)/3,也就是说,新数列的平均值值的期望,相较于原数列的平均值,是相等的;
对于最后一个数列,将只有一个元素,也就是题中描述的那个数,这个数列的平均值就是它自己,所以求它的期望,就是求它的平均值的期望,那么由上面的结论一步步递推下来,就可以得出,这个期望,就是原数组的平均值;
于是,我们只需要求平均值就行了;
#include<iostream> using namespace std; int main() { int T; cin>>T; while(T--){ int a,sum,n; cin>>n; sum=; for(int i=;i<n;i++){ cin>>a; sum+=a; } cout<<sum/n<<endl; } }