拼多多的砍價(jià)屿脐,邀好友進(jìn)行砍價(jià),想必大家對這個(gè)不會(huì)陌生宪卿。作為一個(gè)程序員來說比較好奇它的每個(gè)人能砍的價(jià)格是如何實(shí)現(xiàn)的的诵。根據(jù)經(jīng)驗(yàn)來看,一般是前幾個(gè)能砍的價(jià)格是比較高的佑钾。而后來的好友基本上能砍的價(jià)格是微乎其微的西疤。一般是砍到一定的價(jià)格就不會(huì)再能砍了。
其實(shí)這個(gè)砍價(jià)有點(diǎn)類似于微信的發(fā)紅包休溶。微信是把能獲取的紅包價(jià)格先緩存好代赁,每個(gè)人點(diǎn)就可以取。我們也可以把第幾個(gè)人能砍的價(jià)格緩存到數(shù)據(jù)庫兽掰,而后每個(gè)人砍價(jià)的時(shí)候直接取就好了芭碍。
以下是計(jì)算能砍價(jià)格的思路:
1.砍價(jià)有底線 達(dá)到最低值后不能砍
2.砍價(jià)規(guī)則 按比例計(jì)算出能砍的總價(jià) 按規(guī)則緩存數(shù)據(jù) 以后如果有好友來砍價(jià)從數(shù)據(jù)庫中直接取就可
砍價(jià)規(guī)則:計(jì)算出最多砍價(jià)的價(jià)格 有M個(gè)好友才能砍完 設(shè)置前n個(gè)能砍的價(jià)格是占比為x(n小x大者能砍的錢數(shù)就高) M-n個(gè)能砍的比率就為1-x 能砍的價(jià)格可按發(fā)紅包的算法得出。
代碼實(shí)現(xiàn)如下:
/**
計(jì)算砍價(jià)方法
@param totalPrice 砍價(jià)的總合
@param beforeNumber 前幾個(gè)人
@param reducePercentage 前幾個(gè)人能砍總價(jià)所占的百分比
@param totalReduceNumber 總共砍價(jià)人數(shù)
*/
- (void)KanJiaWithCanReduceTotalPrice:(NSInteger)totalPrice withBeforeNumber:(NSInteger)beforeNumber withBeforePeopleCanReducePer:(float)reducePercentage totalRdcNumber:(NSInteger)totalReduceNumber;
{
//前beforeNumber個(gè)能砍的價(jià)格
NSArray *array1 = [self getRedFromJavaWithTotalMoney:totalPrice*reducePercentage redNumber:beforeNumber minMoney:5];
//后totalReduceNumber-beforeNumber能砍的價(jià)格
NSArray *array2 = [self getRedFromJavaWithTotalMoney:totalPrice*(1-reducePercentage) redNumber:totalReduceNumber-beforeNumber minMoney:1];
NSMutableArray *finishArray = [NSMutableArray array];
[finishArray addObjectsFromArray:array1];
[finishArray addObjectsFromArray:array2];
for (NSString *str in finishArray)
{
NSLog(@"能砍的價(jià)格是%@",str);
}
}
- (NSMutableArray *)getRedFromJavaWithTotalMoney:(CGFloat)total redNumber:(NSInteger)number minMoney:(CGFloat)min
{
float money;
double max;
int i=1;
NSMutableArray *math = [NSMutableArray array];
while(i<number)
{
max = total- min*(number- i);
NSInteger k = (int)((number-i)/2);
if (number -i <= 2)
{
k = number -i;
}
max = max/k;
double val = ((double)arc4random() / 0x100000000);
if (max<min)
{
NSLog(@"max小于min");
max = min+1;
}
money=(int)(min*100+val*(max*100-min*100+1));
money=(float)money/100;
total=total-money;
;
[math addObject:[NSString stringWithFormat:@"%f",money]];
// NSLog(@"第%d人 拿到%f",i,money);
i++;
if(i==number)
{
[math addObject:[NSString stringWithFormat:@"%f",total]];
// NSLog(@"最后 第%d人 拿到%f",i,money);
}
}
return math;
}
而后把這個(gè)價(jià)格緩存到后臺數(shù)據(jù)庫孽尽。第幾個(gè)好友來直接取價(jià)格用總價(jià)減就可以了窖壕。
好好學(xué)習(xí) 天天向上
如有不足之處 歡迎指出。