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
}
}
運行結果如下所示: