免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1027 | 回复: 1
打印 上一主题 下一主题

vc如何也能以3秒速度完成这个问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-27 20:20 |只看该作者 |倒序浏览
vc如何也能以3秒速度完成这个问题?

(已有delphi、vb程序以3秒速度实现)




1、【题目】:
         有一考卷共有14道单选选择题,其中每道选择题都只有“1”、“2”、“3”三种可能答案。
      由于是单选题,所以,每道题有却只有1个正确答案。考生答题时,14道题的答案按题目顺序
      连续书写:xxxxxxxxxxxxxx,其中第1个x代表第1题的答案,第2个x表示第2题的答案......第
      14个x代表第14题的答案,答案顺序不能搞乱。(x只能是“1”“2”“3”三个字符中的一种)
        
      例如:某考生提供的一份答案为“33311122233322”,那么它表示从第1道题~第14道题的答案
           分别为3、3、3、1、1、1、2、2、2、3、3、3、2、2。

现在:数据表“A1.DBF”的ANSWER字段中存有132755个考生的答案(每个考生的答案都不会完全相同,
     也就是说没有重复记录,每个记录存放着一个考生的答案)。

     “A1.DBF”结构:A1.DBF  (ANSWER C(14),NUM_13 N(8,0))

“A1.DBF”数据库下载:点击浏览该文件

2、【我们要解决的事】:
   
      求:相对每个考生的答案(每条记录),存在其他多少个考生(多少个记录)和其相同13个答案。   
        (也就是说:如果分别假设当前记录的answer字段是标准答案,那么分别共有多少人正确13道题。           这正确的13道题是任意的13道题,如果一道题算1分的话,那么就是考13分)

     求解结果(得13分的总人数)放在数据表“A1.DBF”中的字段“NUM_13”中。而“ANSWER”字段
     为相应的、假设的标准答案。

[附]:例子

假设“A1.DBF”只有5条记录,内容分别如下:
     
          ANSWER                NUM_13
    ---------------------------------------
      33333333333333              
      33333333333331              
      33333333333323              
      11111111111111              
      22222222111111              

那么正确的求解结果应该为:

          ANSWER                NUM_13
    ---------------------------------------
      33333333333333              2          (第2、3条记录和自己相同13个答案,共2条记录符合)
      33333333333331              1          (第1条记录和自己相同13个答案,共1条记录符合)
      33333333333323              1          (第1条记录和自己相同13个答案,共1条记录符合)
      11111111111111              0          (没有任何记录和自己相同13个答案,共0条记录符合)
      22222222111111              0          (没有任何记录和自己相同13个答案,共0条记录符合)

*程序意思如下(要得到“投注分析结果.dbf”),但以下代码计算时间要7天左右,可怕:

*********************************************************************** SELECT ANSWER FROM A1 INTO CURSOR  TEMP
SELECT TEMP SCAN    UPDATE A1 SET NUM_13=NUM_13+1  WHERE ;
       IIF(SUBSTR(A1.ANSWER,1,1)=  SUBSTR(TEMP.ANSWER,1,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,2,1)= SUBSTR(TEMP.ANSWER,2,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,3,1)= SUBSTR(TEMP.ANSWER,3,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,4,1)= SUBSTR(TEMP.ANSWER,4,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,5,1)= SUBSTR(TEMP.ANSWER,5,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,6,1)= SUBSTR(TEMP.ANSWER,6,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,7,1)= SUBSTR(TEMP.ANSWER,7,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,8,1)= SUBSTR(TEMP.ANSWER,8,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,9,1)= SUBSTR(TEMP.ANSWER,9,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,10,1)=SUBSTR(TEMP.ANSWER,10,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,11,1)=SUBSTR(TEMP.ANSWER,11,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,12,1)=SUBSTR(TEMP.ANSWER,12,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,13,1)=SUBSTR(TEMP.ANSWER,13,1),1,0);
      +IIF(SUBSTR(A1.ANSWER,14,1)=SUBSTR(TEMP.ANSWER,14,1),1,0)=13 ENDSCAN SELECT NUM_13 AS 二等个数,count(NUM_13) AS 注数  FROM A1 GROUP BY 二等个数 ORDER BY 二等个数 DESC into CURSOR  投注分析结果

SELECT 投注分析结果  &&这就是那个delphi小程序的“投注分析结果”列表内容

BROWSE

***********************************************************************

【附注】:检测你的计算结果是否正确请用以下语句(假如计算结果保存在A1.NUM_13字段中):

SELECT NUM_13 AS 二等个数,count(NUM_13) AS 注数  FROM A1 GROUP BY 二等个数 ORDER BY 二等个数 DESC into CURSOR  投注分析




更多请看:http://www.meizibbs.3322.org/bbs ... ID=37830&page=1

论坛徽章:
0
2 [报告]
发表于 2005-12-27 23:11 |只看该作者
我发现的一点那个delphi程序的规律:
1.所有的数据必须是无分格符的.
2.在处理的数据很大的时候.进度条上显示的最大数值为65536.与Excel电子表格
  的最大容纳数是一样的,不知道其中有什么联系
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP