5295:游戏之随机数

描述

city喜欢自己做游戏玩,游戏里需要一些随机数,由于系统自带的rand只能到32768,于是百度了一下,找到了下面这一个函数,选3个数A,B,C后运行K次后,生成一个随机序列,然后city在从这个序列里随机选取数字,用作游戏里的随机数。

unsigned x = A, y = B, z = C;
unsigned Random() {
  unsigned t;
  x ^= x << 16;
  x ^= x >> 5;
  x ^= x << 1;
  t = x;
  x = y;
  y = z;
  z = t ^ x ^ y;
  return z;
}

在city做好游戏后,zzx感觉这个随机序列不是平均分布的,所以想要验证一下,但zzx事情比较多,想请你帮忙统计一下这个随机序列的最大值,最小值,平均数,来帮助zzx验证。

输入

输入数据有多组,输入到文件结束为止

第一行三个正整数A,B,C(A,B,C<10000)代表随机种子。
第二行一个K,表示生成了K(K<106)个随机数。

输出

第一行有两个整数,为最小值和最大值,用空格隔开

第二行有一个保留两位小数的平均数。

 样例输入

1 1 1
10

样例输出

1 693053781
277275377.80

代码

#include <bits/stdc++.h>
using namespace std;
unsigned x , y , z ;
unsigned Random() {
  unsigned t;
  x ^= x << 16;
  x ^= x >> 5;
  x ^= x << 1;
  t = x;
  x = y;
  y = z;
  z = t ^ x ^ y;
  return z;
}
int main()
{
    unsigned A,B,C;
    while(cin>>A>>B>>C)
    {
      int k;
      cin>>k;
       x = A, y = B, z = C;
        unsigned minn=(1 << 32)-1,maxn=0;
      long long sum=0;
        for(int i=1;i<=k;i++)
        {
            unsigned u=Random();
            minn=min(minn,u);
            maxn=max(maxn,u);
            sum+=u;
        }
        printf("%u %u\n",minn,maxn);
        printf("%.2f\n",sum*1.0/k);
    }
}
View Code

猜你喜欢

转载自www.cnblogs.com/llhsbg/p/11291959.html