| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1160 人关注过本帖
标题:效率太低请大神修正,求助!
取消只看楼主 加入收藏
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
效率太低请大神修正,求助!
数据表上传到:http://www.
说明历史号码与33选6的所有组合数逐一对比的方法,现在用VFP编了程序代码,但本人菜鸟级,于是执行效率太低,
请大神指点为谢。
以下是代码
程序代码:
IF EMPTY()
    MESSAGEBOX("请选择对比期数!",64,"消息窗口")
     
    retu
ENDIF
dimension iRed(33)
j=1
FOR i=1 to 33
    mycheck="thisform.check"+ALLTRIM(STR(i))
    IF &mycheck..value=1
        iRed(j)=IIF(i<10,"0","")+ALLTRIM(STR(i))
        j=j+1
    ENDIF
NEXT
IF j-1<6 
  MESSAGEBOX("至少选6位!",64,"消息窗口")
  RETURN
ENDIF
SELECT ssq
DELETE all
PACK
thisform.image1.Visible= .T.
thisform.image1.Width=0 
thisform.label7.visible= .T. 
Tstar=DATETIME()
i=1
FOR i1=1 to j-6
    FOR i2=i1+1 to j-5
        FOR i3=i2+1 to j-4
            FOR i4=i3+1 to j-3
                FOR i5=i4+1 to j-2
                    FOR i6=i5+1 to j-1
                        INSERT into ssq(id,hm,no1,no2,no3,no4,no5,no6) values(STR(i,10),ired(i1)+" "+ired(i2)+" "+ired(i3)+" "+ired(i4)+" "+ired(i5)+" "+ired(i6),ired(i1),ired(i2),ired(i3),ired(i4),ired(i5),ired(i6))
                        i=i+1
                    NEXT
                NEXT
            NEXT
        NEXT
    NEXT
NEXT
SELECT ssq
REPLACE r1 with 0 ,r2 with 0,r3 with 0,r4 with 0,r5 with 0,r6 with 0 ,r7 with 0 all
GO 1

SELECT RECNO() as hm_recn ,qh FROM hm WHERE ALLTRIM(qh)=ALLTRIM() INTO CURSOR te_a
hmrecc=te_a.hm_recn
SELE hm
&&STORE RECCOUNT() to hmrecc
LOCATE for qh= RECNO() to hmrecn
jd=hmrecc-hmrecn
jdt=0
do while not EOF()
    chm=hm.red1+" "+hm.red2+" "+hm.red3+" "+hm.red4+" "+hm.red5+" "+hm.red6
    SELECT ssq
    do while not EOF()
        n=IIF(AT(No1,chm)>0,1,0)+IIF(AT(no2,chm)>0,1,0)+IIF(AT(no3,chm)>0,1,0)+IIF(AT(no4,chm)>0,1,0)+IIF(AT(no5,chm)>0,1,0)+IIF(AT(no6,chm)>0,1,0)
        DO CASE
        CASE n=0
            REPLACE r1 with r1+1
        CASE n=1
            REPLACE r2 with r2+1
        CASE n=2
            REPLACE r3 with r3+1
        CASE n=3
            REPLACE r4 with r4+1
        CASE n=4
            REPLACE r5 with r5+1
        CASE n=5
            REPLACE r6 with r6+1
        CASE n=6
            REPLACE r7 with r7+1
        ENDCASE
        SKIP
    ENDDO
    jdt=jdt+1
    thisform.image1.Width=jdt/jd*700
    SELECT ssq
    GO 1
    SELECT hm
    SKIP
    IF RECNO()=hmrecc+1
         EXIT do
    ENDIF
ENDDO
SELECT ssq
REPLACE rtext with ALLTRIM(STR(r1))+" "+ALLTRIM(STR(r2))+" "+ALLTRIM(STR(r3))+" "+ALLTRIM(STR(r4))+" "+ALLTRIM(STR(r5))+" "+ALLTRIM(STR(r6))+" "+ALLTRIM(STR(r7)) all

Tend=DATETIME()
MESSAGEBOX("一共生成了"+ALLTRIM(STR(i-1))+"条记录,花费"+ALLTRIM(STR(tend-tstar))+"秒。",64,"消息窗口")
thisform.label7.Visible= .F. 
thisform.image1.Visible= .F. 
IF MESSAGEBOX("您需要导出成TXT文件吗?",4+32,"消息窗口")=6
    STORE ALLTRIM(STR(RECCOUNT())) TO ssqrecc
    GO 1
    txtfile="ssq.txt"
    STRTOFILE("ID,HM,NO1,NO2,NO3,NO4,NO5,NO6,r1,r2,r3,r4,r5,r6,r7,RTEXT"+CHR(13)+CHR(10),txtfile,0)
        do while not EOF()
            STRTOFILE(ALLTRIM(id)+","+hm+","+No1+","+no2+","+no3+","+no4+","+no5+","+no6+","+ALLTRIM(STR(r1))+","+ALLTRIM(STR(r2))+","+ALLTRIM(STR(r3))+","+ALLTRIM(STR(r4))+", "+ALLTRIM(STR(r5))+", "+ALLTRIM(STR(r6))+","+ALLTRIM(STR(r7))+","+ALLTRIM(rtext)+CHR(13)+CHR(10),txtfile,1)
            WAIT WINDOW NOWAIT ALLTRIM(STR(RECNO()))+"/"+ssqrecc
            skip
        enddo
    MESSAGEBOX("已经生成TXT文件!",64,"消息窗口")
ENDIF
搜索更多相关主题的帖子: 数据表 历史 
2014-03-02 16:50
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
收藏
得分:0 
汗!手头仅仅20分,全豁出去,学习中 ......
2014-03-02 16:51
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
收藏
得分:0 
用一个统计表说明会更详尽一些,【见附件】
参见表格里的计算公式:在Q2:V2单元格输入33选5的组合号码,统计数据显示在AC2:AI2单元格里,一共有1107568组号码。

相同数的个数统计公式是  
双色球33选6数据统计表.zip (1000.76 KB)
=IF($A1614="","",SUMPRODUCT((COUNTIF($B1614:$G1614,$Q$2:$V$2)>0)*1))
开出过 0 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,0)---在AC2单元格里,可记作R1
开出过 1 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,1)---在AD2单元格里,可记作R2
开出过 2 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,2)---在AE2单元格里,可记作R3
开出过 3 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,3)---在AF2单元格里,可记作R4
开出过 4 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,4)---在AG2单元格里,可记作R5
开出过 5 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,5)---在AH2单元格里,可记作R6
开出过 6 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,6)---在AI2单元格里,可记作R7
2014-03-02 17:51
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
收藏
得分:0 
这个是2003版本的数据表
双色球33选6数据统计表a.zip (876.57 KB)
2014-03-02 17:58
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
收藏
得分:0 
数据表里有公式说明, 转换为DBF格式行吗?请教
2014-03-02 18:00
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
收藏
得分:0 
历史数据截止日期20140227,期号为2014021,共1614期,命名为history.dbf
生成双色球的组合注数(共1107568注[1至33共33个数据,每注红球6个号码]),命名为ssq.dbf
现在需要做的事情是把history.dbf的6个号码ssq.dbf里的6个号码逐一对比,参见附件的表格说明
[local]1[/local]
开出过 0 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,0)---在AC2单元格里,可记作R1
开出过 1 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,1)---在AD2单元格里,可记作R2
开出过 2 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,2)---在AE2单元格里,可记作R3
开出过 3 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,3)---在AF2单元格里,可记作R4
开出过 4 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,4)---在AG2单元格里,可记作R5
开出过 5 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,5)---在AH2单元格里,可记作R6
开出过 6 个红球的次数统计公式=COUNTIF($AQ$9:$AQ$15199,6)---在AI2单元格里,可记作R7
2014-03-03 12:15
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
收藏
得分:0 
2014-03-03 12:16
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
收藏
得分:0 
1、历史数据截止日期20140302,期号为2014022,共1615期,历史数据表命名为history.dbf
2、生成双色球的组合注数(共1107568注),组合数据表命名为ssq.dbf
3、现在需要做的事情是把ssq.dbf的6个号码和历史数据表history.dbf里的6个号码逐一对比
依次选中ssq.dbf的6个号码,与100期、300期、500期或全部的历史数据比较:
0个号码在历史数据中出现的次数,
1个号码在历史数据中出现的次数,
2个号码组合在历史数据中出现的次数,
3个号码组合在历史数据中出现的次数,
4个号码组合在历史数据中出现的次数,
5个号码组合在历史数据中出现的次数,
6个号码组合在历史数据中出现的次数

例如:ssq.dbf里的ID=1的 01 02 03 04 05 06与history.dbf表里的1615期比较的结果是
0红    411    --0红就是没有相同的数    记为    R1
1红    718    ----1红就是有1个相同的数    记为    R2
2红    392    ----2红就是有2个相同的数    记为    R3
3红     78    ----3红就是有3个相同的数    记为    R4
4红     16    ----4红就是有4个相同的数    记为    R5
5红      0    ----5红就是有5个相同的数    记为    R6
6红      0    ----6红就是有6个相同的数    记为    R7
2014-03-03 14:06
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
收藏
得分:0 
以下是引用sdta在2014-3-3 13:09:18的发言:

如何对比,如:history.dbf中有一条记录6个号码分别为:010203040608;ssq.dbf中有一条记录6个号码分别为:050607080910。如何比较,请楼主说明。

ssq.dbf中有一条记录050607080910       010203040608 比较结果是
2红=1      (--2红就是有2个相同的数,就是06 08)

再例如ssq.dbf中有一条记录050607080910与history.dbf表里的1615期比较的结果是
0红    429    ----0红就是没有相同的数,对比的结果在历史号码里有429组号码与050607080910没有相同的    记为    R1=429
1红    720    ----1红就是有1个相同的数,对比的结果在历史号码里有720组号码                            记为    R2=720
2红    367    ----2红就是有2个相同的数,对比的结果在历史号码里有367组号码                            记为    R3=367
3红     95    ----3红就是有3个相同的数,对比的结果在历史号码里有95组号码                            记为    R4=95
4红      4    ----4红就是有4个相同的数,对比的结果在历史号码里有4组号码                            记为    R5=4
5红      0    ----5红就是有5个相同的数,对比的结果在历史号码里没有5个相同的数                            记为    R6=0
6红      0    ----6红就是有6个相同的数,对比的结果在历史号码里没有6个相同的数                            记为    R7=0
2014-03-03 14:36
洗洗彩票
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-3-1
收藏
得分:0 
如:SSQ.DBF中有一条记录为:020809101523,HISTORY.DBF中有一条记录为:050608101831
上面红色字体标注的号码算单个号码,还是按2个号码组合统计。


记作 2红=1

上面红色字体标注的号码算按2个号码组合统计。就是有2个相同,即同2次数为1.
2014-03-03 14:38
快速回复:效率太低请大神修正,求助!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030049 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved