關於如何產生隨機紅包金額問題

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TestRandom
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        /// <summary>
        /// author:bruce 2016-05-23
        /// title:關於如何在不定金額和不定人數中隨機紅寶數問題
        /// 基本要點:
        /// (1)這裏需要特別注意,隨機紅包輪數要比實際小一輪。最後一輪是總金額減去前面的總和
        /// (2)每次隨機的範圍是1-總金額-人數+輪數-sum(前面的隨機結果),自行思考一下爲什麼需要這麼寫?
        /// (3)每次得到結果需要存放在數組中去
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            //定義參數
            double total = 100;//紅包總金額
            int count = 10;//人數

            //定義存儲已經隨機出來的結果,數組的長度和人數一致
            double[] result = new double[count];
            //循環處理產生隨機數
            for (int i = 0; i < count-1; i++)
            {
                //定義最大值
                double maxValue = total - count + i - SumArray(result);
                //定義臨時結果
                double valuetemp = getRandom(maxValue);
                //裝載到結果中,並打印每次的結果
                result[i] = valuetemp;
                Response.Write("第" + (i + 1) + "輪隨機出的紅包金額爲:" + valuetemp + "</br>");
            } 
            Response.Write("第" + count + "輪隨機出的紅包金額爲:" +(total- SumArray(result)) + "</br>");
            result[count-1] = (total - SumArray(result));
            Response.Write("總紅包金額:"+SumArray(result));
        }

        //定義指定範圍隨機數
        #region
        public double getRandom(double end)
        {
            Random ran = new Random();
            double n = Math.Round(ran.NextDouble() * end, 2);
            return n;
        }
        #endregion

        #region 對不定數組求和
        public double SumArray(double[] arr)
        {
            double sum = 0;
            foreach (double m in arr)
            {
                sum += m;
            }
            return sum;
        }
        #endregion
    }
}

運行結果如下所示:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章