netegg 发表于 2009-10-1 20:40:49





汗~~~

按软件!
不明白,按条目的话,完全不理按软件来计算,那~~怎么在软件上运行.

我以为兄台可以计算到1000条里,每条用到的时间(s), 我理解错误.
XXCP 发表于 2009-10-1 19:23 http://www.autoitx.com/images/common/back.gif
软件条目总数1000?

XXCP 发表于 2009-10-1 21:08:15


软件条目总数1000?
netegg 发表于 2009-10-1 20:40 http://www.autoitx.com/images/common/back.gif

是1000啊,顶数上我没写错

akmm88 发表于 2009-10-3 23:30:32

#cs ----------------------------------------------------------------------------

有1000个条目,
每个条目的内容检索时间为t1毫秒;每检索t2个条目,暂停检索t3毫秒;
软件每运行t4毫秒,暂停运行t5毫秒后继续运行.问:1000个条目,需要多长时间(秒)能检索完.

#ce ----------------------------------------------------------------------------
Global $tHowLong,$tUsed,$iItems
;$tHowLong    临时经过时间
;$tUsed    所用的时间毫秒
;$iItems 条目数量

Global $t1,$t2,$t3,$t4,$t5
$t0="题目作者"
;$t1t2t3t4t5   $t0出的变量,一般人不能理解
Dim $i
;$i 临时循环变量
sinit() ;初始化

For $i=1 to $iItems;循环$iItems次数来计算
        IndexItems() ;内容检索
        If Mod($i,2)=0 Then
                lfPause($t3,1) ;每检索t2个条目,暂停检索t3毫秒;
        EndIf
       
Next
MsgBox(0,$iItems&"条计算时间为",$tUsed / 1000) ;得到秒以和题目的问题相同单位


Func sInit($Fuckingt1t2t3t4t6="这种变量名就像在大便里挑黄豆")
        ;初始化所有变量
        $tUsed=0
        $tHowLong=0
        $iItems=1000
        $t1=1
        $t2=2
        $t3=3
        $t4=4
        $t5=5
EndFunc

Func lfPause($iTime,$AddLong);暂停
        ;题目上的暂停运行是否计算时间
        ;如果要计算时间那么$t4<$t5的话,软件永远处于暂停状态
        ;所以我只能理解为不计算
        If $AddLong=1 Then
                $tHowLong=$tHowLong+$iTime
    EndIf
        $tUsed=$tUsed+$iTime
       
EndFunc

Func IndexItems()
        $tHowLong=$tHowLong+$t1
        ;软件每运行t4毫秒,暂停运行t5毫秒后继续运行
        If $tHowLong / $t4 >0 Then ;如果软件运行时间大于$t4则增加计算时间
                lfPause(Int($tHowLong / $t4)*$t5,0)
                $tHowLong=Mod($tHowLong,$t4);重置软件运行时间计数变量
        EndIf
       
        $tUsed=$tUsed+$t1
EndFunc

akmm88 发表于 2009-10-3 23:33:54

这种变态的题目,花我1个多小时

XXCP 发表于 2009-10-8 21:22:42

没显示出来.


t3触发时,只会使t2,t1处于暂停计数状态,t4,t5仍然正常计数(有可能在T4秒数以内,t1,t2,t3N个循环可以完成,而不触发T5)

t4<t5不会使软件本身永远处于暂停.
t5触发时,会使t4,t3,t2,t1停止计数,但t5本身是计数状态;
有点郁闷..虽然没法交差,但仍然想把这题解出来..

XXCP 发表于 2009-10-8 22:54:31

用akmm88 兄的方法套了一下:
      $iItems=5
      $t1=1
      $t2=2
      $t3=2
      $t4=3
      $t5=3

结果输出:$tUsed=18


我这样套的.
每条用1秒
每检索2条,暂检索2毫秒
每运行3毫秒,暂停运行3毫秒.
1{第1条}+(1+1+3+1){第2条}+1{第3条}+(1+1+3+1){第四条}+1{第五条}
去掉{},1+(1+1+3+1)+1+(1+1+3+1)+1=15毫秒.
--------------------------
1{第1条}+(1+1+3+1){第2条}+1{第3条}+(1+1+3+1){第四条}+1{第五条}
计数(1+1+3+1){第2条}时,触发t3,而T3只计数了1毫秒时,触发t4,等t5结束后还要等1毫秒(T3在T5触发前未完的计数),这是检索第2条时用的时间.
........
这样算下来,却只用了15.


和akmm88 兄提供的计数差3
不解.那3出在哪儿?

akmm88 发表于 2009-10-15 11:57:44

用akmm88 兄的方法套了一下:
      $iItems=5
      $t1=1
      $t2=2
      $t3=2
      $t4=3
      $t5=3

结果输出:$tUsed=18


我这样套的.
每条用1秒
每检索2条,暂检索2毫秒
每运 ...
XXCP 发表于 2009-10-8 22:54 http://www.autoitx.com/images/common/back.gif

共5条 检索2条 共 2毫秒 又要暂停2毫秒,此时软件运行了4毫秒了>t4,需要暂停t5,也就是3毫秒,
到现在已经7毫秒了,继续,检索2条 共 2毫秒 又要暂停2毫秒,此时软件运行5秒,没暂停,得暂停3毫秒,余2毫秒,最后1条检索用1毫秒,软件运行又另1个3秒,需要暂停3秒. 刚好18毫秒.

akmm88 发表于 2009-10-15 12:05:26

你说的多出3毫秒,就是 最后1个T4是否要是软件暂停,如果不用暂停的话
      If $tHowLong / $t4 >0 Then ;如果软件运行时间大于$t4则增加计算时间

                lfPause(Int($tHowLong / $t4)*$t5,0)

                $tHowLong=Mod($tHowLong,$t4);重置软件运行时间计数变量

      EndIf
在这个lfPause前加个判断$i是否=$iItems 需要把$i设置为全局变量.按题目来看,是需要暂停的,因为软件暂停将是答案无法提交,属于异步的,所以我觉得最后一个暂停是需要的.

akmm88 发表于 2009-10-15 12:19:29


t5触发时,会使t4,t3,t2,t1停止计数,但t5本身是计数状态;

t4
XXCP 发表于 2009-10-8 21:22 http://www.autoitx.com/images/common/back.gif
题目上可没说T5会使T4停止计数啊,当然逻辑上是必须停止计数的.

sxd 发表于 2009-10-15 14:06:28

......同学 好久没出现了嘛

XXCP 发表于 2009-10-19 22:46:20

感谢akmm88憾慨解答.

按akmm88的法子去做T4与T5判断.
多谢各位朋友的帮忙.

yangyunbo 发表于 2011-12-27 10:50:11

学习了!感谢!
页: 1 [2]
查看完整版本: 一道计算题,无从下手.请高人指点迷律.