.net C# 抽奖,中奖

demo设置了8个奖项,每个奖项可以自定义中奖率,精度为1/10000

        public string PrizeDraw()
        {
            //奖品以及中奖率
            const string prizeString = "奖品一:33,奖品二:30,奖品三:9,奖品四:8,奖品五:7,奖品六:6,奖品七:5,奖品八:2";
            //将中奖率*100再取整,放在数组中,并从小到大排序
            var prizeArray = prizeString.Split(',').Select(j => new { Prize = j.Split(':')[0], Change = (int)(double.Parse(j.Split(':')[1])* 100) }).OrderBy(j => j.Change).ToArray();
            //将中奖率累加,放到字典里
            var prizeDictionary = new Dictionary<string, int>();
            for (var i = 0; i < 8; i++)
            {
                var allChange = 0;
                for (var j = 0; j <= i; j++)
                {
                    allChange += prizeArray[j].Change;
                }
                prizeDictionary.Add(prizeArray[i].Prize, allChange);
            }
            //产生一个1-10000的随机数
            var rd = new Random();
            var rdChange = rd.Next(1, 10001);
            //找第一个大于随机值的奖项
            return prizeDictionary.First(j => j.Value >= rdChange).Key;
        }

 

转载于:https://www.cnblogs.com/fancyblogs/p/6559840.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个较为完整的 ASP.NET 抽奖示例代码,供您参考: HTML 页面代码: ```html <!DOCTYPE html> <html> <head> <title>抽奖</title> </head> <body> <form id="form1" runat="server"> <div> <h1>抽奖</h1> <p>请输入您的姓名和手机号码:</p> <p> 姓名:<asp:TextBox ID="txtName" runat="server"></asp:TextBox> </p> <p> 手机号码:<asp:TextBox ID="txtMobile" runat="server"></asp:TextBox> </p> <p> <asp:Button ID="btnDraw" runat="server" Text="抽奖" OnClick="btnDraw_Click" /> </p> <div> <asp:Literal ID="ltlResult" runat="server"></asp:Literal> </div> </div> </form> </body> </html> ``` C# 代码: ```csharp using System; using System.Collections.Generic; public partial class Draw : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnDraw_Click(object sender, EventArgs e) { string name = txtName.Text.Trim(); string mobile = txtMobile.Text.Trim(); // 进行抽奖操作 string result = DoDraw(name, mobile); ltlResult.Text = result; } private string DoDraw(string name, string mobile) { // 定义奖品及其中奖概率 Dictionary<string, double> prizes = new Dictionary<string, double>(); prizes.Add("一等奖", 0.01); prizes.Add("二等奖", 0.05); prizes.Add("三等奖", 0.1); prizes.Add("四等奖", 0.2); prizes.Add("未中奖", 0.64); // 生成随机数 Random random = new Random(); double randomNumber = random.NextDouble(); // 根据中奖结果发放奖品 double probability = 0; foreach (var item in prizes) { probability += item.Value; if (randomNumber < probability) { // 记录中奖信息 string prizeName = item.Key; Record(name, mobile, prizeName); // 返回中奖结果 if (prizeName == "未中奖") { return "很遗憾,您没有中奖!"; } else { return string.Format("恭喜您,获得了{0}!", prizeName); } } } return "很遗憾,您没有中奖!"; } private void Record(string name, string mobile, string prizeName) { // 在这里记录中奖信息,可以将中奖信息保存到数据库或文件中 // ... } } ``` 在这个示例代码中,我们通过 `Dictionary` 类型的 `prizes` 变量定义了5个奖品及其中奖概率。在进行抽奖时,我们首先生成一个0到1之间的随机数,根据随机数的值来确定中奖结果,然后根据中奖结果发放对应的奖品,并将中奖信息记录到数据库或文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值