Home  >  Article  >  Backend Development  >  求教一个有关算法的问题

求教一个有关算法的问题

WBOY
WBOYOriginal
2016-06-23 14:14:491033browse

本帖最后由 Specs_ 于 2013-07-01 10:02:02 编辑



现在有个关于打折促销类的算法问题,不知道该怎么实现,在这里请教一下大家。

现有一批商品要打折促销,要用抽奖的玩法实现。

比如打 九折的中奖概率是 40%,
打 八折的中奖概率是 10%,
打 七折的中奖人数是 120个,
打 六折的中奖人数是 10个,

现在要实现这样的功能,算法应该怎么写呢?

回复讨论(解决方案)

应该还谈不上算法

举个简单的例子.
9折中奖率40%    那你可以

$num = rand(0,9);if($num <4){    //中奖代码}else{    //未中奖代码}

八折10%的同理. 

固定中奖人数的  要估算一个概率,然后用同样的方式计算是否中奖
将已中奖人数存入数据库 当剩余中奖人数到0后 概率调整成0即可.

从六折开始往下算  中了高的不再中低的

当然这是我想到的简单的处理办法  如果有算法级别的精准高效实现方式 同求学习

应该还谈不上算法

举个简单的例子.
9折中奖率40%    那你可以

$num = rand(0,9);if($num <4){    //中奖代码}else{    //未中奖代码}

八折10%的同理. 

固定中奖人数的  要估算一个概率,然后用同样的方式计算是否中奖
将已中奖人数存入数据库 当剩余中奖人数到0后 概率调整成0即可.

从六折开始往下算  中了高的不再中低的 以前我写一个抽奖的也是这种思路来做的。虽然简单,但是基本够用。

/** 获取折扣率,这里只是随机获取 *  对于7、6折的,提前/之后判断是否达到数量,然后给予10%的几率。 */function luckRate(){	$randn = rand(1,10);	$re = 1;	switch ($randn)	{		case 1:		case 2:		case 3:		case 4:			$re = 0.9;			break;		case 5:			$re = 0.8;			break;		case 6:			$re = 0.7;			break;		case 7:			$re = 0.6;			break;		default:			$re = 1;			break;	}}

应该还谈不上算法

举个简单的例子.
9折中奖率40%    那你可以

$num = rand(0,9);if($num <4){    //中奖代码}else{    //未中奖代码}

八折10%的同理. 

固定中奖人数的  要估算一个概率,然后用同样的方式计算是否中奖
将已中奖人数存入数据库 当剩余中奖人数到0后 概率调整成0即可.

从六折开始往下算  中了高的不再中低的

现在的关键是固定人数的概率没发判断,因为不同的商品,可能的参与抽奖人数都不同,有的可能有1万人参与,有的可能只有1千,所以这个估算概率这里不好做


应该还谈不上算法

举个简单的例子.
9折中奖率40%    那你可以

$num = rand(0,9);if($num <4){    //中奖代码}else{    //未中奖代码}

八折10%的同理. 

固定中奖人数的  要估算一个概率,然后用同样的方式计算是否中奖
将已中奖人数存入数据库 当剩余中奖人数到0后 概率调整成0即可.

从六折开始往下算  中了高的不再中低的

现在的关键是固定人数的概率没发判断,因为不同的商品,可能的参与抽奖人数都不同,有的可能有1万人参与,有的可能只有1千,所以这个估算概率这里不好做

程序只能解决计算问题   会有多少人抽奖  这不是程序能判断的 这是活动策划人要考虑的...   

大概估个范围 然后取概率最低的

你是说要一个程序对应不同的人数的 六折 七折?  那必须将估计好的范围设定好然后传入这个程序或者让这个程序去读取.

你是说要一个程序对应不同的人数的 六折 七折?  那必须将估计好的范围设定好然后传入这个程序或者让这个程序去读取.

也就是说还是要给定一个概率才可以是吗

不论是打几折,定义好数量,比如打九折,需要抽10个,创建一个随机函数,在数据库查询范围内的10个记录就可以了。


你是说要一个程序对应不同的人数的 六折 七折?  那必须将估计好的范围设定好然后传入这个程序或者让这个程序去读取.

也就是说还是要给定一个概率才可以是吗

我理解是的...

不论是打几折,定义好数量,比如打九折,需要抽10个,创建一个随机函数,在数据库查询范围内的10个记录就可以了。 \

并不是一次性抽10个吧  应该是是那种有个用户到店就可以抽一次 抽完为止的(最好此时活动差不多就要结束了)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn