DOTA2翻硬币网站规则java版本

package com.yagou.yggx.provider.ygst.task;import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class ReaperMd5 {public static void main(String[] args) throws NoSuchAlgorithmException {
//
//        为了确保游戏的公平性,我们采用HASH值方案以防止游戏过程中作弊,
//      即在游戏的过程中,从一开始就已经产生了随机的百分比值,
//      在游戏结束后,通过计算游戏参与方的百分比值区间,转化为相对应的筹码,从进而确定中奖者。/*** java中 随机数的 产生的三种方式*/
//      一.在j2se里我们可以使用Math.random()方法来产生一个随机数,
//      这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,
//      比如说乘以100,他就是个100以内的随机,这个在j2me中没有。 double  random001 = Math.random();System.out.println(random001);//      二.在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,
//      他可以产生随机整数、随机float、随机double,随机long,这个也是我们在j2me的程序里经常用的一个取随机数的方法。 //      不带种子:
//      此种方式将会返回随机的数字,每次运行结果不一样 System.out.println("不带种子: ");System.out.println("此种方式将会返回随机的数字,每次运行结果不一样  ");System.out.println("");java.util.Random r=new java.util.Random(); for(int i=0;i<1;i++){ System.out.println(r.nextInt()); } //      带种子:
//      此种方式,无论程序运行多少次,返回结果都是一样的 System.out.println("带种子:");System.out.println("此种方式,无论程序运行多少次,返回结果都是一样的 ");System.out.println("");java.util.Random r1=new java.util.Random(10); for(int i=0;i<1;i++){ System.out.println(r1.nextInt()); } //      三.在我们的System类中有一个currentTimeMillis()方法,这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long,我们可以拿他作为一个随机数,我们可以拿他对一些数取模,就可以把他限制在一个范围之内啦 long currentTime =  System.currentTimeMillis();System.out.println(currentTime%100);//
//        关于hash值:
//
//          我们采用MD5的不可逆加密算法,在每轮游戏开始的时候,都会生成本轮的hash的值,以便玩家事后验证。
//       由于MD5具有极大的离散性, 改动任何一位数字将导致hash的不同,所以利用这个原理,我们可以确定每轮游戏的公平性。String str = "chenzhongqiang";// 生成一个MD5加密计算摘要MessageDigest md = MessageDigest.getInstance("MD5");// 计算md5函数md.update(str.getBytes());// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值String bint =  new BigInteger(1, md.digest()).toString(16);System.out.println("MD5:"+bint);
//
//          我们的MD5加密格式是MD5=Random(随机码):Key(秘钥)
//        如何验证hash值: 例如,某轮游戏的hash值是A0EC3F6BC80AB7B06FC6178B41E176FE
//        当本轮游戏开奖后,网站将公布Random(随机码12.3451234512340%)和Key(秘钥RGSRDLMVLJ)。
//        您可以根据Random(随机码)和Key(秘钥), 在第三方网站(例如www.xmd5.org/Encrypt_cn.htm或者自行百度“md5加密”)进行加密验证。
//        对“12.3451234512340%:RGSRDLMVLJ” 加密后的结果就是网站提前公布的hash值A0EC3F6BC80AB7B06FC6178B41E176FE //        常规加密md5($pass) 32位小写String pass = "12.3451234512340%:RGSRDLMVLJ";String hash = MD5Util.MD5(pass);System.out.println(pass+" 的hash值为: "+hash);random001 = 0.123451234512340;String key = "RGSRDLMVLJ";BigDecimal random = BigDecimal.valueOf(random001);Md5ToHash(random, key);// 总筹码值double totalsteam = 454.25;// Random(随机码)
//       double random001 = 454.25;BigDecimal totalsteamb = BigDecimal.valueOf(totalsteam);caculateHitNumber(totalsteamb, random);//         特别说明:随着个人计算机和服务器性能的不断提高,通过不断组合数字,
//       将各种可能加密出来实现针对Hash码暴力破解已经成为可能,因此,在结果显示前,
//       我们对Hash码第29-31位以*号进行代替,即使采用了暴力破解,对HASH码仍然有46656(36*36*36)种可能,无法预知结果。
//
//          reaper();
//       Hash: CF6AE4CF3F813CC7971996A7F7929436
//
//       Random: 76.2055990040504%
//
//       Key: b6bsM87jEw
//
//       WinnerTicket: 5349 // TODO Auto-generated method stub//       Hash: 3DA6F2523C045DE1A8D533E151D79249
//
//       Random:96.6972266201678%
//
//       Key: 1KB9GDcz1x
//
//       WinnerTicket: 1616 }/***  游戏开始*/public static void reaper(){//Random(随机码)BigDecimal random = getRandom();//      Key(秘钥String key = "RGSRDLMVLJ";// 总筹码值double totalsteam = 454.25;BigDecimal totalsteamb = BigDecimal.valueOf(totalsteam);//      2、hash值计算Md5ToHash(random, key);//       3、计算中奖码caculateHitNumber(totalsteamb, random);}/***  1、获取随机数*/public static BigDecimal getRandom(){double  random001 = Math.random();System.out.println(random001);BigDecimal random = BigDecimal.valueOf(random001).setScale(15, RoundingMode.FLOOR);return random;}/*** 2、hash值计算* */public static void Md5ToHash(BigDecimal random ,String key){//      我们的MD5加密格式是MD5=Random(随机码):Key(秘钥)
//      如何验证hash值: 例如,某轮游戏的hash值是A0EC3F6BC80AB7B06FC6178B41E176FE
//      当本轮游戏开奖后,网站将公布Random(随机码12.3451234512340%)和Key(秘钥RGSRDLMVLJ)。
//      您可以根据Random(随机码)和Key(秘钥), 在第三方网站(例如www.xmd5.org/Encrypt_cn.htm或者自行百度“md5加密”)进行加密验证。
//      对“12.3451234512340%:RGSRDLMVLJ” 加密后的结果就是网站提前公布的hash值A0EC3F6BC80AB7B06FC6178B41E176FE //        常规加密md5($pass) 32位小写
//       String pass = "12.3451234512340%:RGSRDLMVLJ";String pass = random.multiply(BigDecimal.valueOf(100)).setScale(13).toString() +"%:"+key;String hash = MD5Util.MD5(pass);System.out.println(pass+" 的hash值为: "+hash);}/*** 3、计算中奖码* @param totalsteam 总筹码值* @param random001  Random(随机码*/public static void  caculateHitNumber(BigDecimal totalsteam, BigDecimal random ){//      如何选择中奖筹码:
//      0.01的steam值将等于1个筹码值Ticket,
//   比赛开奖的时候,系统将统计总筹码值TotalNumberOfTickets(例如总奖池是454.25, 则总筹码等于45425)。
//   中奖筹码的计算公式是: floor(TotalNumberOfTickets * Random)+1 例如:TotalNumberOfTickets=45425,random=12.3451234512340%,
//   则中奖筹码=floor(45425*12.3451234512340%)+1=5608//          0.01的steam值将等于1个筹码值Ticket,double steamPrecent = 0.01;
//       比赛开奖的时候,系统将统计总筹码值TotalNumberOfTickets(例如总奖池是454.25, 则总筹码等于45425)。BigDecimal  totalNumberOfTickets  = totalsteam.multiply( BigDecimal.valueOf(1/steamPrecent));//       random = BigDecimal.valueOf(0.123451234512340);//       MathContext mc = new MathContext(random.scale(),RoundingMode.FLOOR);  //       中奖筹码的计算公式是: floor(TotalNumberOfTickets * Random)+1 例如:TotalNumberOfTickets=45425,random=12.3451234512340%,BigDecimal hitNumber =  totalNumberOfTickets.multiply(random).divide(BigDecimal.ONE, 0, RoundingMode.FLOOR).add(BigDecimal.ONE);System.out.println("中奖筹码="+hitNumber);}}

DOTA2翻硬币网站规则java版本相关推荐

  1. 网站接入QQ登录最新2020 java版本

    1.首先先注册账号,然后填资料审核,等个三四天吧大概 https://connect.qq.com/ 2.审核通过后点击创建应用,把备案号什么的都填(这个审核两天之内一般) !!! 这里有个重点,网站 ...

  2. 蓝桥杯历届试题:翻硬币——Java实现

    题目: 以下是输入输出格式: 这里我也没多想,看到了输入的字符串不是固定的,但是我们需要对其进行元素的操作,马上就想到了Java中字符串和字符数组之间的转换--toCharArray()方法. 以下是 ...

  3. 算法技巧-翻硬币问题java

    1902 翻硬币 有N枚硬币,编号1到N.现在有如下4种操作: 1.翻转所有硬币,即正的变成反的,反的变成正的. 2.翻转所有奇数号的硬币. 3.翻转所有偶数号的硬币. 4.翻转所有编号形式为 3M+ ...

  4. PREV-6翻硬币(Java)

    PREV-6翻硬币(Java) 前言 这是一道简单题,只要用心去想很容易就想到了 问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 ...

  5. 浅谈 翻硬币游戏【Nim博弈】

    ACM博客_kuangbin 博弈-翻硬币游戏 hihoCoder 1172 : 博弈游戏·Nim游戏·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Alice和B ...

  6. 蓝桥杯试题:矩阵翻硬币

    矩阵翻硬币 这是蓝桥杯的一道练习题,题目如下: 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬币进行 Q 操作的定义:将所 ...

  7. python写网站和java写网站的区别-为什么说Java和Python现阶段并不适合普通网站建设...

    经过20多年的发展,网站开发技术已经非常成熟,用于网站制作的程序语言也有很多.常见的当然是php和asp.net,特别是php程序语言,虽然其已经有很多年历史也历经多次迭代升级,但在凭借其开源.轻巧等 ...

  8. [androd] android的在线源码网站,各个版本都有(目前已到俺android 4.2,但不包含kernel部分的代码)

    android的在线源码阅读网站,各个版本都有(目前最新版本已到android 4.2,但不包含kernel部分的代码) 这个网站最大的特点是:可以在网页上方的搜索框,搜索整个网站所存储的源码中的字符 ...

  9. 组装一台计算机 java_如何在同一台计算机上安装多个Java版本

    组装一台计算机 java 一段时间以前,我写了一篇文章< 用示例解释Java Lambda表达式>,但是我很容易浏览Java 8,因为我在项目中使用了Java 8,并且允许我安装和使用它. ...

最新文章

  1. 数据可视化必修课 - 图表篇
  2. 服务器系统一键功能安装,一键安装服务器系统
  3. windows剪切板暂存
  4. 文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...
  5. 合数分解质数c语言算法,合数分解成质数之和问题探究
  6. C# winform post 请求指定 url
  7. c语言第四章选择结构作业,《c语言程序设计教程》林芳易云飞》第四章选择结构例题,习题详解...
  8. 深入浅出 MFC -WIN32基本概念
  9. 【手指识别】基于matlab GUI指尖图像采集与检测【含Matlab源码 585期】
  10. C盘扩容:如何把D盘内存扩展到c盘?
  11. 简单好用又免费的百度翻译mac桌面端
  12. 让一台电脑死机至少需要几行代码
  13. 20+主流跨境电商平台API地址大全
  14. 学生管理系统--【Java+MySQL】--数据库系统概论综合性实验
  15. From.Designer.cs和From.cs的关系
  16. 这个AR/VR设计原型利器,爆赞
  17. python数据分析面试常见问题及答案_十道 Python 面试问题陷阱
  18. githubPC端下载地址
  19. 蓝桥杯:历年试题PREV-55—小计算器
  20. LeetCode50——一题学会快速幂算法

热门文章

  1. 中国安全技术防范行业协会:安防工程最高级一级申报需满足这5个基础条件!
  2. 【Redis】Redis持久化之RDB详解(Redis专栏启动)
  3. PHP 代码实现表单数据验证类 整理的各种情况
  4. regsvr32命令集锦
  5. 【转载】什么区块链,统统是骗子
  6. Arch Linux 安装简明流程
  7. 手把手教你申报2019个人所得税(已退税1800)
  8. 在微型计算机中 cmos属于A顺序存储器,2019年9月网络教育统考计算机模拟卷(精华版)...
  9. oracle grid需要安装,Oracle GridControl 安装教程
  10. 基于java的理发店管理系统_java毕业设计_springboot框架的理发店信息管理