杭州个人小客车摇号百分之百中签率所需要的时间预测和阶梯摇号概率提升

2018年7月31日,杭州第一次车牌阶梯摇号落下帷幕,各种准确的数据进行了详细公布,咱们可以更准确的对像我这样运气不佳的久摇不中的人进行摇号预测了。可以看到带一次第一阶梯的阶梯摇号的概率相当于普通接近十倍。基准中签率:0.624670% ,基准时间:2018年-7月,阶梯摇号指标:10000, 达到两年阶梯摇号的人数:167357,两年阶梯摇号的中签概率:5.423493%,达到四年阶梯摇号的人数:17026,四年阶梯摇号的中签概率:10.846987%。
作为老码农,当看到杭州开始个人小客车开始阶梯摇号的通知,忍耐不出想计算以下,我们久摇不中的人阶梯摇号增加了多少倍中签概率,以当前中签概率,至少多少年才能保证有百分之百的中签概率。是不是我们程序猿的思维和大家的思维不一样,是不是觉得我们满脑子是数据和统计学的概率?我们没有问题吧!
以2018年7月个人摇号标准中签率为0.62467%,参与七月个人阶梯摇号的有效申请编码总数184383个;摇号基数总数为201409个,其中:第一阶梯的有167357个,第二阶梯的有34052个(17026人,因为它们一个人有2两个阶梯摇号基数)。一年有两次阶梯摇号,每两年增加一次阶梯摇号基数。现在假设以后都按照这个数据来预测,你何时能够有百分之百概率中签(这个是统计学的问题,不排除有的人一次就摇到号了,不能排除那个倒霉蛋达到200%的中签还在奋力拼搏,不过正常的中签概率达到100%都能中签的)。杭州首次摇号时间是2014年5月,截止到今天(2018年8月1日),最早的一批人摇号了四年零三个月(不包括8月还没有摇号开奖的),下面看看你还需要奋斗多少年。
参照以2018年7月个人摇号标准中签率为标准计算的数据如下:
基准中签率:0.006247 ,基准时间:2018年-7月,阶梯摇号指标:10000, 达到两年阶梯摇号的人数:167357,两年阶梯摇号的中签概率:0.054235,达到四年阶梯摇号的人数:17026,四年阶梯摇号的中签概率:0.108470
可见两年阶梯摇号一次(阶梯摇号包括单独阶梯摇号和普通摇号 5.4235%+0.62467%)的概率是普通一摇号(0.62467%)的9.68倍,一年两次阶梯摇号相当于一年额外增加约17次普通摇号。
若现在各个中签率变可以计算出何时能百分之百中签。下面以我2016年8月开始摇号(截止到2018年6月正好进行23期摇号)为计算的例子,我中间没有中断过摇号。下面是以今天2018年7月的数据参数为基准,计算出来的数据:
预计最迟中签时间 2022年-7月,总摇号有效次数:72, 摇号时间:72月 距离预计最迟中签时间还剩下(月):48月, 距离预计最迟中签时间还剩下(年):4.000000年
总中签率:105.913069%,开始时间:2016年-8月
基准中签率:0.624670% ,基准时间:2018年-7月,阶梯摇号指标:10000, 达到两年阶梯摇号的人数:167357,两年阶梯摇号的中签概率:5.423493%,达到四年阶梯摇号的人数:17026:105.913069%,开始时间:2016年-8月
基准中签率:0.624670% ,基准时间:2018年-7月,阶梯摇号指标:10000, 达到两年阶梯摇号的人数:167357,两年阶梯摇号的中签概率:5.423493%,达到四年阶梯摇号的人数:17026\357,四年阶梯摇号的中签概率:10.846987%, 无效效摇号次数:0。
可以看到我最快4年才能保证百分之百中签,我刚好赶上第一期阶梯摇号,这个是最理想的情况,由于新的参加摇号人员的增加,有更多的人进入4年或6年摇号阶梯摇号,这些都导致最迟百分之百概率中签的时间增加,只是增加的不是很离谱的程度,必定只是预测。
下面以我同事2016年2月(截止到2018年7月正好进行30期摇号)摇号为计算的例子,我中间没有中断过摇号。下面是以今天2018年7月为统计,计算出来的数据:
预计最迟中签时间 2022年-7月,总摇号有效次数:78, 摇号时间:78月 距离预计最迟中签时间还剩下(月):48月, 距离预计最迟中签时间还剩下(年):4.000000年
总中签率:116.760056%,开始时间:2016年-2月
基准中签率:0.624670% ,基准时间:2018年-7月,阶梯摇号指标:10000, 达到两年阶梯摇号的人数:167357,两年阶梯摇号的中签概率:5.423493%,达到四年阶梯摇号的人数:17026,四年阶梯摇号的中签概率:10.846987%, 无效效摇号次数:0。
下面是以今天(2018年7月并且包含本月)开始预测,从开始摇号到2018年7月(当前时间的月份,注意从当月摇号发布到月底的时间也认为是当月还没有开始,因为摇号有时有推迟这个时间算不准)开始摇号的人开始摇号时间及预计中签时间,所需要的月对照表(可以看到当正好处于阶梯开始后一个月参加摇号比其它时间要早几个月,我就时这个幸运时间开始摇号的):

2018-08-01 15:04:12.423269+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2014年-5月,  中签时间 2021年-7月, 摇号时间:87月 剩下(月):36月
2018-08-01 15:04:12.423632+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2014年-6月,  中签时间 2021年-7月, 摇号时间:86月 剩下(月):36月
2018-08-01 15:04:12.423802+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2014年-7月,  中签时间 2021年-7月, 摇号时间:85月 剩下(月):36月
2018-08-01 15:04:12.423959+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2014年-8月,  中签时间 2021年-7月, 摇号时间:84月 剩下(月):36月
2018-08-01 15:04:12.424143+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2014年-9月,  中签时间 2021年-10月, 摇号时间:86月 剩下(月):39月
2018-08-01 15:04:12.424558+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2014年-10月,  中签时间 2021年-10月, 摇号时间:85月 剩下(月):39月
2018-08-01 15:04:12.425157+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2014年-11月,  中签时间 2021年-10月, 摇号时间:84月 剩下(月):39月
2018-08-01 15:04:12.425327+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2014年-12月,  中签时间 2021年-10月, 摇号时间:83月 剩下(月):39月
2018-08-01 15:04:12.425625+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-1月,  中签时间 2021年-10月, 摇号时间:82月 剩下(月):39月
2018-08-01 15:04:12.425784+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-2月,  中签时间 2021年-10月, 摇号时间:81月 剩下(月):39月
2018-08-01 15:04:12.425992+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-3月,  中签时间 2022年-1月, 摇号时间:83月 剩下(月):42月
2018-08-01 15:04:12.426141+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-4月,  中签时间 2022年-1月, 摇号时间:82月 剩下(月):42月
2018-08-01 15:04:12.426288+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-5月,  中签时间 2022年-1月, 摇号时间:81月 剩下(月):42月
2018-08-01 15:04:12.426434+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-6月,  中签时间 2022年-1月, 摇号时间:80月 剩下(月):42月
2018-08-01 15:04:12.427379+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-7月,  中签时间 2022年-1月, 摇号时间:79月 剩下(月):42月
2018-08-01 15:04:12.427599+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-8月,  中签时间 2022年-1月, 摇号时间:78月 剩下(月):42月
2018-08-01 15:04:12.428009+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-9月,  中签时间 2022年-7月, 摇号时间:83月 剩下(月):48月
2018-08-01 15:04:12.428161+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-10月,  中签时间 2022年-7月, 摇号时间:82月 剩下(月):48月
2018-08-01 15:04:12.428310+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-11月,  中签时间 2022年-7月, 摇号时间:81月 剩下(月):48月
2018-08-01 15:04:12.428757+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2015年-12月,  中签时间 2022年-7月, 摇号时间:80月 剩下(月):48月
2018-08-01 15:04:12.428909+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-1月,  中签时间 2022年-7月, 摇号时间:79始摇号时间 2015年-12月,  中签时间 2022年-7月, 摇号时间:80月 剩下(月):48月
2018-08-01 15:04:12.428909+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-1月,  中签时间 2022年-7月, 摇号时间:79\346月 剩下(月):48月
2018-08-01 15:04:12.429389+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-2月,  中签时间 2022年-7月, 摇号时间:78月 剩下(月):48月
2018-08-01 15:04:12.429538+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-3月,  中签时间 2022年-7月, 摇号时间:77月 剩下(月):48月
2018-08-01 15:04:12.429685+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-4月,  中签时间 2022年-7月, 摇号时间:76月 剩下(月):48月
2018-08-01 15:04:12.429831+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-5月,  中签时间 2022年-7月, 摇号时间:75月 剩下(月):48月
2018-08-01 15:04:12.429977+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-6月,  中签时间 2022年-7月, 摇号时间:74月 剩下(月):48月
2018-08-01 15:04:12.430123+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-7月,  中签时间 2022年-7月, 摇号时间:73月 剩下(月):48月
2018-08-01 15:04:12.430529+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-8月,  中签时间 2022年-7月, 摇号时间:72月 剩下(月):48月
2018-08-01 15:04:12.430760+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-9月,  中签时间 2023年-1月, 摇号时间:77月 剩下(月):54月
2018-08-01 15:04:12.430910+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-10月,  中签时间 2023年-1月, 摇号时间:76月 剩下(月):54月
2018-08-01 15:04:12.431056+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-11月,  中签时间 2023年-1月, 摇号时间:75月 剩下(月):54月
2018-08-01 15:04:12.431202+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2016年-12月,  中签时间 2023年-1月, 摇号时间:74月 剩下(月):54月
2018-08-01 15:04:12.431385+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-1月,  中签时间 2023年-1月, 摇号时间:73月 剩下(月):54月
2018-08-01 15:04:12.432877+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-2月,  中签时间 2023年-1月, 摇号时间:72月 剩下(月):54月
2018-08-01 15:04:12.433043+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-3月,  中签时间 2023年-3月, 摇号时间:73月 剩下(月):56月
2018-08-01 15:04:12.433190+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-4月,  中签时间 2023年-3月, 摇号时间:72月 剩下(月):56月
2018-08-01 15:04:12.433338+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-5月,  中签时间 2023年-3月, 摇号时间:71月 剩下(月):56月
2018-08-01 15:04:12.433483+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-6月,  中签时间 2023年-3月, 摇号时间:70月 剩下(月):56月
2018-08-01 15:04:12.433628+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-7月,  中签时间 2023年-3月, 摇号时间:69月 剩下(月):56月
2018-08-01 15:04:12.433955+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-8月,  中签时间 2023年-3月, 摇号时间:68月 剩下(月):56月
2018-08-01 15:04:12.434103+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-9月,  中签时间 2023年-7月, 摇号时间:71月 剩下(月):60月
2018-08-01 15:04:12.434249+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-10月,  中签时间 2023年-7月, 摇号时间:70月 剩下(月):60月
2018-08-01 15:04:12.434395+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-11月,  中签时间 2023年-7月, 摇号时间:69月 剩下(月):60月
2018-08-01 15:04:12.434542+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2017年-12月,  中签时间 2023年-7月, 摇号时间:68月 剩下(月):60月
2018-08-01 15:04:12.434895+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2018年-1月,  中签时间 2023年-7月, 摇号时间:67月 剩下(月):60月
2018-08-01 15:04:12.435043+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2018年-2月,  中签时间 2023年-7月, 摇号时间:66月 剩下(月):60月
2018-08-01 15:04:12.435290+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2018年-3月,  中签时间 2024年-1月, 摇号时间:71月 剩下(月):66月
2018-08-01 15:04:12.435457+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2018年-4月,  中签时间 2024年-1月, 摇号时间:70月 剩下(月):66月
2018-08-01 15:04:12.435605+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2018年-5月,  中签时间 2024年-1月, 摇号时间:69月 剩下(月):66月
2018-08-01 15:04:12.435753+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2018年-6月,  中签时间 2024年-1月, 摇号时间:68月 剩下(月):66月
2018-08-01 15:04:12.436097+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2018年-7月,  中签时间 2024年-1月, 摇号时间:67月 剩下(月):66月
2018-08-01 15:04:12.436247+0800 ArtEnjoymentWeChatAuction[36276:3164213] 开始摇号时间 2018年-8月,  中签时间 2024年-1月, 摇号时间:66月 剩下(月):66月

下面是指定开始摇号日期(可以通过修改前面的数据来根据具体参数和指定开始摇号日期进行重新计算),以当前月份(包括当月)开始统计自己的中签概率和预计百分之百中签的各种数据,有条件的可以自己修改参数自己重新计算,本程序以objective-c语言写的程序,当然你也可以转成自己的语言,只需要把获取当前时间的代码修改下就可以了,其它都是比较通用的语句,我尽量少设计语言本身的变量类型:

-(void)statisticsSigningRate1
{
    int       year                             = 2018;          //中签率基准年
    int       month                            = 7;             //中签率基准年
    double    signingRate                      = 0.0062467;        //中签率基准年
    long long towYearPersonNumber              = 167357;        //两年没有中签遗留人数
    long long fourYearPersonNumber             = 17026;         //四年没有中签遗留人数
    long long sixYearPersonNumber              = 0;
    long long eightYearPersonNumber            = 0;
    long long tenYearPersonNumber              = 0;
    long long twelveYearPersonNumber           = 0;
    long long fourteenYearPersonNumber         = 0;
    int startYear                              = 2016;          //本人开始摇号的年
    int startMonth                             = 8;             //本人开始摇号的月
    int leakTimer                              = 0;             //从开始摇号开始审核失效的摇号次数
    long long ladderShakingConfigurationNumber = 10000;         //一次阶梯摇号的指标


    int shakingStartYear                       = 2014;          //杭州摇号第一期摇号的年,固定值不要修改
    int shakingStartMonth                      = 5;             //杭州摇号第一期摇号的月,固定值不要修改

    int ladderShakingStartYear                 = 2018;          //杭州阶梯摇号第一期摇号的年,固定值不要修改
    int ladderShakingStartMonth                = 7;             //杭州阶梯摇号第一期摇号的月,固定值不要修改


    if(leakTimer < 0)
    {
        leakTimer = abs(leakTimer);
    }

    //防止除数为0
    if(towYearPersonNumber <= 0)
    {
        towYearPersonNumber = 167357;
    }
    if(fourYearPersonNumber <= 0)
    {
        fourYearPersonNumber = 17026;
    }

    long long nowTime = (long long)([[NSDate date] timeIntervalSince1970]);
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateStyle:NSDateFormatterMediumStyle];
    [formatter setTimeStyle:NSDateFormatterShortStyle];
    [formatter setDateFormat:@"yyyy"];
    NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:nowTime];
    int nowYear = [[formatter stringFromDate:confromTimesp] intValue];

    NSDateFormatter *monthFormatter = [[NSDateFormatter alloc] init];
    [monthFormatter setDateStyle:NSDateFormatterMediumStyle];
    [monthFormatter setTimeStyle:NSDateFormatterShortStyle];
    [monthFormatter setDateFormat:@"MM"];
    NSDate *monthFormatterConfromTimesp = [NSDate dateWithTimeIntervalSince1970:nowTime];
    int nowMonth = [[monthFormatter stringFromDate:monthFormatterConfromTimesp] intValue];

    if(0 == startYear)
    {
        startYear = nowYear;
        startMonth = nowMonth;
        leakTimer = 0;
    }
    BOOL findSigningRate = NO;
    double calculationSigningRate = 0.0;
    int timerCount = 0;
    int remainderTimerCount = 0;
    double yearPersonNumber = 0;
    BOOL isFirstMonth = YES;
    double yearPersonNumberTemp = (towYearPersonNumber - fourYearPersonNumber - sixYearPersonNumber - eightYearPersonNumber - tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber) + (fourYearPersonNumber - sixYearPersonNumber - eightYearPersonNumber - tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber)*2 + (sixYearPersonNumber - eightYearPersonNumber - tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber)*3 + (eightYearPersonNumber- tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber) *4 + (tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber)*5 + (twelveYearPersonNumber - fourteenYearPersonNumber) *6 + fourteenYearPersonNumber*7;

    yearPersonNumber = yearPersonNumberTemp;
    for(int indexYear = shakingStartYear; !findSigningRate; indexYear++)
    {
        int indexMonth = 1;
        if(isFirstMonth)
        {
            indexMonth = shakingStartMonth;
            isFirstMonth = NO;
        }
        for(; !findSigningRate && (indexMonth <= 12); indexMonth++)
        {
            if(indexYear > startYear)
            {
                timerCount++;
            }
            else if((indexYear == startYear) && (indexMonth >= startMonth))
            {
                timerCount++;
            }

            if((indexYear > nowYear) || ((indexYear == nowYear) && (indexMonth >= nowMonth)))
            {
                remainderTimerCount++;
                yearPersonNumber = yearPersonNumberTemp;
                if((indexYear == 2020) && (indexMonth == 8))
                {
                    NSLog(@"test");
                }
                if(((indexYear > ladderShakingStartYear) || ((indexYear == ladderShakingStartYear) && (indexMonth >= ladderShakingStartMonth))) && ((7 == indexMonth) || (1 == indexMonth)))
                {
                    if(timerCount - leakTimer < 24)
                    {
                        calculationSigningRate = calculationSigningRate + signingRate;
                    }
                    else if(timerCount - leakTimer < 24 * 2)
                    {
                        calculationSigningRate = calculationSigningRate + signingRate;
                        if(ladderShakingConfigurationNumber > 0)
                        {
                            yearPersonNumber = ladderShakingConfigurationNumber / yearPersonNumber;
                            calculationSigningRate = calculationSigningRate + yearPersonNumber;
                        }
                    }
                    else if(timerCount - leakTimer < 24 * 3)
                    {
                        calculationSigningRate = calculationSigningRate + signingRate;
                        if(ladderShakingConfigurationNumber > 0)
                        {
                            yearPersonNumber = 2*ladderShakingConfigurationNumber / yearPersonNumber;
                            calculationSigningRate = calculationSigningRate + yearPersonNumber;
                        }
                    }
                    else if(timerCount - leakTimer < 24 * 4)
                    {
                        calculationSigningRate = calculationSigningRate + signingRate;
                        if(ladderShakingConfigurationNumber > 0)
                        {
                            yearPersonNumber = 3*ladderShakingConfigurationNumber / yearPersonNumber;
                            calculationSigningRate = calculationSigningRate + yearPersonNumber;
                        }
                    }
                    else if(timerCount - leakTimer < 24 * 5)
                    {
                        calculationSigningRate = calculationSigningRate + signingRate;
                        if(ladderShakingConfigurationNumber > 0)
                        {
                            yearPersonNumber = 4*ladderShakingConfigurationNumber / yearPersonNumber;
                            calculationSigningRate = calculationSigningRate + yearPersonNumber;
                        }
                    }
                    else if(timerCount - leakTimer < 24 * 6)
                    {
                        calculationSigningRate = calculationSigningRate + signingRate;
                        if(ladderShakingConfigurationNumber > 0)
                        {
                            yearPersonNumber = 5*ladderShakingConfigurationNumber / yearPersonNumber;
                            calculationSigningRate = calculationSigningRate + yearPersonNumber;
                        }
                    }
                    else if(timerCount - leakTimer < 24 * 7)
                    {
                        calculationSigningRate = calculationSigningRate + signingRate;
                        if(ladderShakingConfigurationNumber > 0)
                        {
                            yearPersonNumber = 6*ladderShakingConfigurationNumber / yearPersonNumber;
                            calculationSigningRate = calculationSigningRate + yearPersonNumber;
                        }
                    }
                    else if(timerCount - leakTimer < 24 * 8)
                    {
                        calculationSigningRate = calculationSigningRate + signingRate;
                        if(ladderShakingConfigurationNumber > 0)
                        {
                            yearPersonNumber = 7*ladderShakingConfigurationNumber / yearPersonNumber;
                            calculationSigningRate = calculationSigningRate + yearPersonNumber;
                        }
                    }
                }
                else
                {
                    calculationSigningRate = calculationSigningRate + signingRate;
                }

                NSLog(@"时间 %d年-%d月,总摇号有效次数:%d, 摇号时间:%d月 中签率:%f%%", indexYear,indexMonth,timerCount - leakTimer,timerCount,calculationSigningRate*100);

                if(calculationSigningRate >= 1)
                {
                    findSigningRate = YES;
                    yearPersonNumber = yearPersonNumberTemp;
                    NSLog(@"预计最迟中签时间 %d年-%d月,总摇号有效次数:%d, 摇号时间:%d月 距离预计最迟中签时间还剩下(月):%d月, 距离预计最迟中签时间还剩下(年):%f年\n 总中签率:%f%%,开始时间:%d年-%d月 \n 基准中签率:%f%% ,基准时间:%d年-%d月,阶梯摇号指标:%lld, 达到两年阶梯摇号的人数:%lld,两年阶梯摇号的中签概率:%f%%,达到四年阶梯摇号的人数:%lld,四年阶梯摇号的中签概率:%f%%, 无效效摇号次数:%d", indexYear,indexMonth,timerCount - leakTimer,timerCount,remainderTimerCount,((double)remainderTimerCount)/12,calculationSigningRate*100,startYear,startMonth,signingRate*100,year,month,ladderShakingConfigurationNumber,towYearPersonNumber,100*ladderShakingConfigurationNumber/(double)(yearPersonNumber),fourYearPersonNumber, 100*2*ladderShakingConfigurationNumber/(double)(yearPersonNumber),leakTimer);
                }
            }
        }
    }

}

下面是从杭州首次摇号开始时间到当前月份(包括当月)的开始摇号人,预计百分之百中签的各种数据:

-(void)statisticsSigningRate
{
//    int       year                             = 2018;          //中签率基准年
//    int       month                            = 7;             //中签率基准年
    double    signingRate                      = 0.0062467;        //中签率基准年
    long long towYearPersonNumber              = 167357;        //两年没有中签遗留人数
    long long fourYearPersonNumber             = 17026;         //四年没有中签遗留人数
    long long sixYearPersonNumber              = 0;
    long long eightYearPersonNumber            = 0;
    long long tenYearPersonNumber              = 0;
    long long twelveYearPersonNumber           = 0;
    long long fourteenYearPersonNumber         = 0;
    int startYear                              = 2016;          //本人开始摇号的年
    int startMonth                             = 8;             //本人开始摇号的月
    int leakTimer                              = 0;             //从开始摇号开始审核失效的摇号次数
    long long ladderShakingConfigurationNumber = 10000;         //一次阶梯摇号的指标


    int shakingStartYear                       = 2014;          //杭州摇号第一期摇号的年,固定值不要修改
    int shakingStartMonth                      = 5;             //杭州摇号第一期摇号的月,固定值不要修改

    int ladderShakingStartYear                 = 2018;          //杭州阶梯摇号第一期摇号的年,固定值不要修改
    int ladderShakingStartMonth                = 7;             //杭州阶梯摇号第一期摇号的月,固定值不要修改


    if(leakTimer < 0)
    {
        leakTimer = abs(leakTimer);
    }

    //防止除数为0
    if(towYearPersonNumber <= 0)
    {
        towYearPersonNumber = 167357;
    }
    if(fourYearPersonNumber <= 0)
    {
        fourYearPersonNumber = 17026;
    }

    long long nowTime = (long long)([[NSDate date] timeIntervalSince1970]);
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateStyle:NSDateFormatterMediumStyle];
    [formatter setTimeStyle:NSDateFormatterShortStyle];
    [formatter setDateFormat:@"yyyy"];
    NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:nowTime];
    int nowYear = [[formatter stringFromDate:confromTimesp] intValue];

    NSDateFormatter *monthFormatter = [[NSDateFormatter alloc] init];
    [monthFormatter setDateStyle:NSDateFormatterMediumStyle];
    [monthFormatter setTimeStyle:NSDateFormatterShortStyle];
    [monthFormatter setDateFormat:@"MM"];
    NSDate *monthFormatterConfromTimesp = [NSDate dateWithTimeIntervalSince1970:nowTime];
    int nowMonth = [[monthFormatter stringFromDate:monthFormatterConfromTimesp] intValue];

    if(0 == startYear)
    {
        startYear = nowYear;
        startMonth = nowMonth;
        leakTimer = 0;
    }
    BOOL findSigningRate = NO;
    double calculationSigningRate = 0.0;
    int timerCount = 0;
    int remainderTimerCount = 0;
    double yearPersonNumber = 0;
    BOOL isFirstMonth = YES;
    BOOL isFirstStartMonth = YES;
    double yearPersonNumberTemp = (towYearPersonNumber - fourYearPersonNumber - sixYearPersonNumber - eightYearPersonNumber - tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber) + (fourYearPersonNumber - sixYearPersonNumber - eightYearPersonNumber - tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber)*2 + (sixYearPersonNumber - eightYearPersonNumber - tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber)*3 + (eightYearPersonNumber- tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber) *4 + (tenYearPersonNumber - twelveYearPersonNumber - fourteenYearPersonNumber)*5 + (twelveYearPersonNumber - fourteenYearPersonNumber) *6 + fourteenYearPersonNumber*7;

    yearPersonNumber = yearPersonNumberTemp;

    for(int i = shakingStartYear; ; i++)
    {
        if(i > nowYear)
        {
            break;
        }

        int j = 1;
        if(isFirstStartMonth)
        {
            j = shakingStartMonth;
            isFirstStartMonth = NO;
        }
        for(; (j <= 12); j++)
        {
            if((i == nowYear) && (j > nowMonth))
            {
                break;
            }
            findSigningRate = NO;
            calculationSigningRate = 0.0;
            timerCount = 0;
            remainderTimerCount = 0;
            yearPersonNumber = 0;
            isFirstMonth = YES;
            startYear = i;
            startMonth = j;
            leakTimer = 0;

            for(int indexYear = shakingStartYear; !findSigningRate; indexYear++)
            {
                int indexMonth = 1;
                if(isFirstMonth)
                {
                    indexMonth = shakingStartMonth;
                    isFirstMonth = NO;
                }
                for(; !findSigningRate && (indexMonth <= 12); indexMonth++)
                {
                    if(indexYear > startYear)
                    {
                        timerCount++;
                    }
                    else if((indexYear == startYear) && (indexMonth >= startMonth))
                    {
                        timerCount++;
                    }

                    if((indexYear > nowYear) || ((indexYear == nowYear) && (indexMonth >= nowMonth)))
                    {
                        remainderTimerCount++;
                        yearPersonNumber = yearPersonNumberTemp;
                        if(((indexYear > ladderShakingStartYear) || ((indexYear == ladderShakingStartYear) && (indexMonth >= ladderShakingStartMonth))) && ((7 == indexMonth) || (1 == indexMonth)))
                        {
                            if(timerCount - leakTimer < 24)
                            {
                                calculationSigningRate = calculationSigningRate + signingRate;
                            }
                            else if(timerCount - leakTimer < 24 * 2)
                            {
                                calculationSigningRate = calculationSigningRate + signingRate;
                                if(ladderShakingConfigurationNumber > 0)
                                {
                                    yearPersonNumber = ladderShakingConfigurationNumber / yearPersonNumber;
                                    calculationSigningRate = calculationSigningRate + yearPersonNumber;
                                }
                            }
                            else if(timerCount - leakTimer < 24 * 3)
                            {
                                calculationSigningRate = calculationSigningRate + signingRate;
                                if(ladderShakingConfigurationNumber > 0)
                                {
                                    yearPersonNumber = 2*ladderShakingConfigurationNumber / yearPersonNumber;
                                    calculationSigningRate = calculationSigningRate + yearPersonNumber;
                                }
                            }
                            else if(timerCount - leakTimer < 24 * 4)
                            {
                                calculationSigningRate = calculationSigningRate + signingRate;
                                if(ladderShakingConfigurationNumber > 0)
                                {
                                    yearPersonNumber = 3*ladderShakingConfigurationNumber / yearPersonNumber;
                                    calculationSigningRate = calculationSigningRate + yearPersonNumber;
                                }
                            }
                            else if(timerCount - leakTimer < 24 * 5)
                            {
                                calculationSigningRate = calculationSigningRate + signingRate;
                                if(ladderShakingConfigurationNumber > 0)
                                {
                                    yearPersonNumber = 4*ladderShakingConfigurationNumber / yearPersonNumber;
                                    calculationSigningRate = calculationSigningRate + yearPersonNumber;
                                }
                            }
                            else if(timerCount - leakTimer < 24 * 6)
                            {
                                calculationSigningRate = calculationSigningRate + signingRate;
                                if(ladderShakingConfigurationNumber > 0)
                                {
                                    yearPersonNumber = 5*ladderShakingConfigurationNumber / yearPersonNumber;
                                    calculationSigningRate = calculationSigningRate + yearPersonNumber;
                                }
                            }
                            else if(timerCount - leakTimer < 24 * 7)
                            {
                                calculationSigningRate = calculationSigningRate + signingRate;
                                if(ladderShakingConfigurationNumber > 0)
                                {
                                    yearPersonNumber = 6*ladderShakingConfigurationNumber / yearPersonNumber;
                                    calculationSigningRate = calculationSigningRate + yearPersonNumber;
                                }
                            }
                            else if(timerCount - leakTimer < 24 * 8)
                            {
                                calculationSigningRate = calculationSigningRate + signingRate;
                                if(ladderShakingConfigurationNumber > 0)
                                {
                                    yearPersonNumber = 7*ladderShakingConfigurationNumber / yearPersonNumber;
                                    calculationSigningRate = calculationSigningRate + yearPersonNumber;
                                }
                            }
                        }
                        else
                        {
                            calculationSigningRate = calculationSigningRate + signingRate;
                        }

                        if(calculationSigningRate >= 1)
                        {
                            findSigningRate = YES;
                            yearPersonNumber = yearPersonNumberTemp;
                            NSLog(@"开始摇号时间 %d年-%d月,  中签时间 %d年-%d月, 摇号时间:%d月 剩下(月):%d月", startYear,startMonth, indexYear,indexMonth,timerCount-leakTimer,remainderTimerCount > timerCount-leakTimer ? timerCount-leakTimer : remainderTimerCount);
                        }
                    }
                }
            }
        }
    }

}

猜你喜欢

转载自blog.csdn.net/jia12216/article/details/80985637