zoukankan      html  css  js  c++  java
  • 改变随机数中一些值的概率

    The problem:

    掷骰子游戏中6个点数出现的概率是相等的,抛开这个游戏,那么我们想在随机取1~6的整数时,某些整数被取得的概率变大;

    The solution:

    思路:将一个整数区间[0,n)分为6份,然后从这个区间随机取得某整数x,则x落到每份中的概率为:若每份等长则落到每份的概率都是相等的;若某份较长则x落到该份的概率较大;以下我取区间为[0,36),当然也可取[0,18),[0,24)等等;

    code:[C#,Unity3d圣典]

    int  MyRandom()
    	{
    		int [] QuJian = new int[6];
    		int number = 0;
    	
    		QuJian[0]=6;//每一个数组元素表示该份区间的整数个数;若数组元素都相等表示每份中的整数个数相等,则x落到每份中得概率相等;
    		QuJian[1]=9;//明显x落到QuJian[1]的概率大于落到QuJian[2]的概率,但全部的数组元素的和为36;
    		QuJian[2]=3;
    		QuJian[3]=6;
    		QuJian[4]=6;
    		QuJian[5]=6;
    
    		int sum_All = 0;
    		for(int i = 0;i<6;i++)
    		{
    			sum_All+=QuJian[i];
    		}
    
    		number = Random.Range(0,sum_All);//随机选择整数x
    
    		int sum =0;
    		for(int i =0 ;i<6;i++)
    		{
    			if( number>=sum && number<sum+ QuJian[i])//寻找落到哪个区间
    			{
    				
    				number = i+1;
    				break;
    			}
    			sum+=QuJian[i];
    		}
    		print("random" + number);
    		return number;
    	}


    GOOD LUCK!

  • 相关阅读:
    learning scala view collection
    scala
    learning scala dependency injection
    learning scala implicit class
    learning scala type alise
    learning scala PartialFunction
    learning scala Function Recursive Tail Call
    learning scala Function Composition andThen
    System.Threading.Interlocked.CompareChange使用
    System.Threading.Monitor的使用
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3822177.html
Copyright © 2011-2022 走看看