程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 一道騰訊面試題

一道騰訊面試題

編輯:C#入門知識

view plainprint?
/** 
 * 已知有個rand7()的函數,返回1到7隨機自然數,讓利用這個rand7()構造rand10() 隨機1~10。 
 */  
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace ConsoleApplication1  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            Rand10 rand10 = Rand10.GetInstance();  
            long total = 9999999;  
            //記錄1~10的數產生的次數  
            int[] numArray = new int[10];  
            for (long i = 0; i < total; i++)  
            {  
                int randomNumber = rand10.Next();  
                numArray[randomNumber - 1]++;  
            }  
            //打印產生各數的概率  
            for (int i = 0; i < numArray.Length; i++)  
            {  
                Console.WriteLine(string.Format("產生{0}的概率是:{1:0.00000}", i + 1, (Double)numArray[i] / total));  
            }  
            Console.ReadLine();  
        }  
    }  
    //1~7的隨機數產生類  
    public class Rand7  
    {  
        private static Rand7 _rand7;  
        private readonly Random _random = new Random();  
        private  Rand7()  
        {    
  
        }  
        public static Rand7 GetInstance()  
        {  
            if(_rand7==null)  
            {  
                _rand7 = new Rand7();  
            }  
            return _rand7;  
        }  
        //獲得隨機數  
        public int Next()  
        {  
            return _random.Next(1, 8);  
        }  
    }  
  
    //1~10的隨機數產生類  
    public class Rand10  
    {  
         private static Rand10 rand10;  
         private Rand7 _rand7 = Rand7.GetInstance();  
        private  Rand10()  
        {  
  
        }  
        public static Rand10 GetInstance()  
        {  
            if(rand10==null)  
            {  
                rand10 = new Rand10();  
            }  
            return rand10;  
        }  
        //獲得隨機數  
        public int Next()  
        {  
            int num;  
            //均勻產生1、 2 、3、4、5  
            while (true)  
            {  
                num = _rand7.Next();  
                if (num <= 5)  
                    break;  
            }  
  
            while (true)  
            {  
                int n = _rand7.Next();  
                if (n == 4)  
                    continue;  
                //n大於4的數字有5、6、7,因為是由Rand7產生的,所以概率均勻  
                if (n > 4)  
                //因為num只可取值1、2、3、4、5並且取值概率均勻,num*2可得2、4、6、8、10也概率均勻  
                    num *= 2;  
                //n小於4的數字有1、2、3,因為是由Rand7產生的,所以概率均勻  
                else  
                //因為num只可取值1、2、3、4、5並且取值概率均勻,num*2-1可得1、3、5、7、9也概率均勻  
                    num = num * 2 - 1;  
                break;  
            }  
            return num;  
        }  
    }  
}  

作者“cangkukuaimanle的專欄”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved