关于C# 中奖率的算法

时间:2021-02-20 09:07:22
大家对 C# 中奖率的算法 有什么好的想法,来说说。我的项目里有个商品表,商品表里设置中奖率50% ,这个字段随便填写,只要是% 里面数值型的,这是后台添加。到前台要根据这个中奖率来换算是否中奖。这个要怎么实现呢?有好的想法说来听听。

13 个解决方案

#1


生成一个0-1之间的随机数
小于等于0.5就算中奖

#2


但是这样的做法是,如果是70人参加,也许会有40多人中奖,但是项目不允许这样。

#3


到前台要根据这个中奖率来换算是否中奖

你的意思是,首先每个商品有自己的一个中奖率,然后前台客户进行一个类似摇奖的功能,获得一个抽奖的号码,然后判断这号码是否在你设置的中奖号码里面


static void Main(string[] args)
        {
            int cusNum = 56;  //客户抽奖号码
            string cen = "30%";  //某商品中奖概率
            Random rd = new Random();
            int r = rd.Next(0, 100);
            if (cusNum < Convert.ToInt32(cen.Replace("%", "")))
            {
                Console.WriteLine("中奖号码:{0}", cusNum);
            }
            else
            {
                Console.WriteLine("没中奖");
            }
            Console.Read();
        }

#4


引用 2 楼 yanhongli123 的回复:
但是这样的做法是,如果是70人参加,也许会有40多人中奖,但是项目不允许这样。


这个得看设置的中奖率来说的,

#5


你的意思,是不是设一个中奖率,然后有多少人参加,取根据这个中奖率,设置最大有多少个人中奖,然后随时取出中奖的人?

select top (根据参加的人数*中奖率) from 参加人的记录 ORDER BY NEWID() ASC

试试

#6


引用 3 楼 wknight_it 的回复:
到前台要根据这个中奖率来换算是否中奖

你的意思是,首先每个商品有自己的一个中奖率,然后前台客户进行一个类似摇奖的功能,获得一个抽奖的号码,然后判断这号码是否在你设置的中奖号码里面

C# code

static void Main(string[] args)
        {
            int cusNum = 56;  //客户抽奖号码
            ……



这个里面没有设置客户抽奖号码的字段。

#7


项目里没有设置客户抽奖号码的字段。

#8


引用 5 楼 zjwz001 的回复:
你的意思,是不是设一个中奖率,然后有多少人参加,取根据这个中奖率,设置最大有多少个人中奖,然后随时取出中奖的人?

select top (根据参加的人数*中奖率) from 参加人的记录 ORDER BY NEWID() ASC

试试



但是我这个项目是进来个人申请商品就直接换算告诉他是否中奖了,不是一起根据参加的人数 看是否中奖

#9


引用 8 楼 yanhongli123 的回复:
引用 5 楼 zjwz001 的回复:

你的意思,是不是设一个中奖率,然后有多少人参加,取根据这个中奖率,设置最大有多少个人中奖,然后随时取出中奖的人?

select top (根据参加的人数*中奖率) from 参加人的记录 ORDER BY NEWID() ASC

试试



但是我这个项目是进来个人申请商品就直接换算告诉他是否中奖了,不是一起根据参加的人数 看是否中……


进入个人申请商品就按中奖率来自动抽奖?


static void Main(string[] args)
        {
            string cen = "30%";  //某商品中奖概率
            Random rd = new Random();
            int r = rd.Next(0, 100);
            if (r < Convert.ToInt32(cen.Replace("%", "")))
            {
                Console.WriteLine("中奖号码:{0}", r);
            }
            else
            {
                Console.WriteLine("没中奖");
            }
            Console.Read();
        }


你程序直接帮这个客户抽一个号码,并判断是否在中奖率之内,不就可以了嘛,(3L代码有点错误)

#10


很简单,做一个计数器count
50%几率那就是if(count%2==0) {//中奖...}
用户是感觉不出来的

#11


这个只能用假的随机了吧

你可以根据已参加的人数和已中奖的人数来判断是否达到可以出奖的情况,然后用一个固定的随机概率去生成是否中奖,但这样你要注意保密中奖情况,不能让别人来猜出来连续有多少人没中奖

比如 20%概率

第一个人来的时候是0个人中奖,0%比20%小,随机一个数,规则可以说<0.5就中奖
如果第一个中奖了,那现在的中奖情况就是100%了,那比20%下,直接就不中奖,一直到中奖比例小于20%后,接着又随机,判断是否小于0.5

#12


0.5可能太大,如果人数多,可以调整的小一点,这样比较随机

#13


我最后是 按中奖率获得一个1-100之间的抽奖号码,然后生成1-100的数组,用得到的抽奖号到数组里去匹配,看是否中奖。

#1


生成一个0-1之间的随机数
小于等于0.5就算中奖

#2


但是这样的做法是,如果是70人参加,也许会有40多人中奖,但是项目不允许这样。

#3


到前台要根据这个中奖率来换算是否中奖

你的意思是,首先每个商品有自己的一个中奖率,然后前台客户进行一个类似摇奖的功能,获得一个抽奖的号码,然后判断这号码是否在你设置的中奖号码里面


static void Main(string[] args)
        {
            int cusNum = 56;  //客户抽奖号码
            string cen = "30%";  //某商品中奖概率
            Random rd = new Random();
            int r = rd.Next(0, 100);
            if (cusNum < Convert.ToInt32(cen.Replace("%", "")))
            {
                Console.WriteLine("中奖号码:{0}", cusNum);
            }
            else
            {
                Console.WriteLine("没中奖");
            }
            Console.Read();
        }

#4


引用 2 楼 yanhongli123 的回复:
但是这样的做法是,如果是70人参加,也许会有40多人中奖,但是项目不允许这样。


这个得看设置的中奖率来说的,

#5


你的意思,是不是设一个中奖率,然后有多少人参加,取根据这个中奖率,设置最大有多少个人中奖,然后随时取出中奖的人?

select top (根据参加的人数*中奖率) from 参加人的记录 ORDER BY NEWID() ASC

试试

#6


引用 3 楼 wknight_it 的回复:
到前台要根据这个中奖率来换算是否中奖

你的意思是,首先每个商品有自己的一个中奖率,然后前台客户进行一个类似摇奖的功能,获得一个抽奖的号码,然后判断这号码是否在你设置的中奖号码里面

C# code

static void Main(string[] args)
        {
            int cusNum = 56;  //客户抽奖号码
            ……



这个里面没有设置客户抽奖号码的字段。

#7


项目里没有设置客户抽奖号码的字段。

#8


引用 5 楼 zjwz001 的回复:
你的意思,是不是设一个中奖率,然后有多少人参加,取根据这个中奖率,设置最大有多少个人中奖,然后随时取出中奖的人?

select top (根据参加的人数*中奖率) from 参加人的记录 ORDER BY NEWID() ASC

试试



但是我这个项目是进来个人申请商品就直接换算告诉他是否中奖了,不是一起根据参加的人数 看是否中奖

#9


引用 8 楼 yanhongli123 的回复:
引用 5 楼 zjwz001 的回复:

你的意思,是不是设一个中奖率,然后有多少人参加,取根据这个中奖率,设置最大有多少个人中奖,然后随时取出中奖的人?

select top (根据参加的人数*中奖率) from 参加人的记录 ORDER BY NEWID() ASC

试试



但是我这个项目是进来个人申请商品就直接换算告诉他是否中奖了,不是一起根据参加的人数 看是否中……


进入个人申请商品就按中奖率来自动抽奖?


static void Main(string[] args)
        {
            string cen = "30%";  //某商品中奖概率
            Random rd = new Random();
            int r = rd.Next(0, 100);
            if (r < Convert.ToInt32(cen.Replace("%", "")))
            {
                Console.WriteLine("中奖号码:{0}", r);
            }
            else
            {
                Console.WriteLine("没中奖");
            }
            Console.Read();
        }


你程序直接帮这个客户抽一个号码,并判断是否在中奖率之内,不就可以了嘛,(3L代码有点错误)

#10


很简单,做一个计数器count
50%几率那就是if(count%2==0) {//中奖...}
用户是感觉不出来的

#11


这个只能用假的随机了吧

你可以根据已参加的人数和已中奖的人数来判断是否达到可以出奖的情况,然后用一个固定的随机概率去生成是否中奖,但这样你要注意保密中奖情况,不能让别人来猜出来连续有多少人没中奖

比如 20%概率

第一个人来的时候是0个人中奖,0%比20%小,随机一个数,规则可以说<0.5就中奖
如果第一个中奖了,那现在的中奖情况就是100%了,那比20%下,直接就不中奖,一直到中奖比例小于20%后,接着又随机,判断是否小于0.5

#12


0.5可能太大,如果人数多,可以调整的小一点,这样比较随机

#13


我最后是 按中奖率获得一个1-100之间的抽奖号码,然后生成1-100的数组,用得到的抽奖号到数组里去匹配,看是否中奖。