Erlang随机数生成一注双色球

Erlang代码实现的双色球随机数生成器存在缺陷,每次运行生成相同的号码。作者寻求改进方案。
-module(double_ball).
-export([
    get_double_ball/0
        ]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%随机生成一注双色球                           %%
%%jddge-判断一个数字是否在当前的红色球列表中   %%
%%get_red-获取6个红球号码                      %%
%%get_double_ball-获取一注双色球               %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
get_double_ball() ->
    Red = qsort(get_red(6,[],0)),
    Double_ball = Red ++ random:uniform(16),
    io:format("double ball is : ~p~n",[Double_ball]).

%%TotalCount是要生成的红色球个数6
%%Red是当前红色球列表
%%Count是当前红色球列表的个数
get_red(TotalCount,Red,Count) ->
    get_red(TotalCount,Red,Count,random:uniform(33)).

get_red(TotalCount,Red,Count,Temp) ->
    if Count =:= TotalCount ->
            Red;
        _ ->
            case judge(Temp,Red) of
                true ->
                    io:format("Temp is  ~p~n",[Temp]),
                    get_red(TotalCount,[Temp|Red],Count+1);
                false ->
                    get_red(TotalCount,Red,Count)
            end
    end.

judge(Temp,[H|T]) ->
    if Temp == H ->
            false;
        _ ->
            judge(Temp,T)
    end;
judge(_Temp,[]) -> true.

qsort([Pivot|T]) ->
    qsort([X || X <- T,X < Pivot])
    ++ [Pivot] ++
        qsort([X || X <- T,X >= Pivot]);

qsort([]) -> [].

此代码的缺陷:测试发现,多次运行此代码生成的双色球号码是同样的。目前还没想到好办法,希望以后改进。

如果哪位有好的建议,可以分享一下啦!~~~



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值