- 论坛徽章:
- 0
|
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 |
|