結(jié)合網(wǎng)上的算法贵扰,記錄下來備用仇穗。
暫定抽獎(jiǎng)分為三個(gè)獎(jiǎng)項(xiàng),每一個(gè)獎(jiǎng)項(xiàng)的概率戚绕、數(shù)量可以控制纹坐。當(dāng)一個(gè)獎(jiǎng)項(xiàng)的數(shù)量為0的時(shí)候,該獎(jiǎng)項(xiàng)的中獎(jiǎng)概率自動(dòng)變?yōu)?舞丛。確保獎(jiǎng)項(xiàng)不會(huì)超出預(yù)算耘子。每人每天限制抽獎(jiǎng)次數(shù),每天可以抽n次瓷马。中獎(jiǎng)后的人員必須填寫姓名和電話拴还,填寫完成跨晴,獎(jiǎng)品自動(dòng)減1欧聘。如果你是做長(zhǎng)線活動(dòng)的,活動(dòng)還做了特殊處理端盆,當(dāng)一個(gè)用戶中獎(jiǎng)次數(shù)超過或等于2的時(shí)候就不能再中獎(jiǎng)了怀骤,但是他每天還是可以抽獎(jiǎng),保證了公眾賬號(hào)的活動(dòng)的活躍度焕妙。如果分享到朋友圈蒋伦,朋友沒有關(guān)注,參加不了活動(dòng)焚鹊,會(huì)自動(dòng)跳轉(zhuǎn)到一篇介紹活動(dòng)的軟文痕届。
直接上代碼
unit Unit7;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, xSuperObject, Vcl.StdCtrls, math;
type
TForm7 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function get_rand(ProArr: ISuperArray): ISuperObject;
public
{ Public declarations }
end;
var
Form7: TForm7;
implementation
{$R *.dfm}
procedure TForm7.Button1Click(Sender: TObject);
var
S: ISuperArray;
jo: ISuperObject;
begin
s := sa('[{"id":1,"prize":"Canon 5D2","v":5},{"id":2,"prize":"平板","v":15},{"id":3,"prize":"U盤","v":20},{"id":4,"prize":"電腦","v":3},{"id":5,"prize":"IPHONE","v":27},{"id":6,"prize":"not","v":30}]');
jo := Get_rand(s);
memo1.Lines.Add(jo.AsJSON);
end;
function TForm7.get_rand(ProArr: ISuperArray): ISuperObject;
var
Chance: integer;
i, randnum, j: Integer;
begin
chance := 0;
result := nil;
try
for i := 0 to ProArr.Length - 1 do
begin
j := ProArr.O[i].I['v'];
Chance := Chance + j;
end;
for i := 0 to proarr.Length - 1 do
begin
RandNum := randomrange(1, Chance);
if RandNum <= ProArr.O[i].I['v'] then
begin
result := ProArr.O[i];
break;
end
else begin
Chance := Chance - ProArr.O[i].I['v'];
end;
end;
finally
end;
end;
end.