3mile 发表于 2010-8-3 16:08:12

回复 15# thesnow
哦,的确是这样。怎么忘了还有4开头和7开头的数了呢?

yarsye 发表于 2010-8-3 16:26:55

牛人 啊 佩服

psp7456 发表于 2010-8-3 17:21:05

$num在6位数以下还能勉强算出结果,也能保证正确性,但一旦上了7位数,就变成漫长的等待......
不知道换成其他语言比如C语言,运行速度能否更快一些。
local $i,$j
local $num=999999;题目要求的是999999999
for $i=1 to $num
        if stringregexp($i,"4|7") then
                continueloop
        else
                $j=$j+$i
        endif
next
MsgBox(4096, "答案", $j)

thesnow 发表于 2010-8-3 17:58:07

回复 18# psp7456


    也许会快一点.但是穷举快不到哪里去(因为需要先把数字转换为字符串,然后查找字符串"4"或者"7")
如果快的话,应该不是用的穷举.而且还有精度问题...
想法是:
枚举可能出现的字符串,然后相加.(这样计算量小得多)
比如:
一位
   4
二位
   14
   24
   34
   44
   54
   64
   74
   84
   94
三位
104
114
124
134
等等...
需要一个算法来枚举出来不需要的.

用前面的公式算出总量后减去.

3mile 发表于 2010-8-3 18:50:26

问题的关键是没有规律可言啊。
如34,41,42.....49,54.....

auto 发表于 2010-8-3 19:47:40

这个有点难度,数学兼算法

xyold1 发表于 2010-8-3 19:50:41

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
999999999
数有9列
共999999999行
我想每一列都有规律吧

ivanpg 发表于 2010-8-3 20:47:03

如果4和7不参与运算的话,我想应该很难找出规律。。


个人想法。。。。

C.L 发表于 2010-8-3 22:34:11

本帖最后由 C.L 于 2010-8-3 22:41 编辑

很有意思的题目,我也写了一个算法,算1-999999999(除去含4和7的数)相加的耗时为 4MS 左右,Input框只能输入数字为9的数,如:99,9999,99999999,输入其他非9组成的数,不保证结果正确

local $num = InputBox ('叠加1-999*','只能输入数字9','')
Local $result = ""
local $i,$j
Local $timer = TimerInit ()
for $i=1 to 99
        if Not stringregexp($i,"4|7") then
                $j=$j+$i
        endif
        If $i = 9 Then
                $one = $j
        Else
                $two = $j
        EndIf
next

$len = StringLen ($num)
If $len < 2 Then
        $result = $one
Else
        $result = $two
EndIf

$pe = ""
For $i=1 To $len-2
        For $j=1 To $i-1
                $pe &= "0"
        Next
        $p = '80.'&$pe&'72'&$pe&'72'&$pe&'72'&$pe&'72'
        $result = Round($result * $p)
        $pe = ""
Next
MsgBox (0,"耗时:"&TimerDiff ($timer),"1-"&$num &" 相加的数是:"&$result)

netegg 发表于 2010-8-3 22:40:18

大家看这样行不行,把带4和7的算出来,然后减呢,哪个快些?

afan 发表于 2010-8-3 22:45:27

很有意思的题目,我也写了一个算法,算1-999999999(除去含4和7的数)相加的耗时为 4MS 左右,Input框只能输 ...
C.L 发表于 2010-8-3 22:34 http://www.autoitx.com/images/common/back.gif


    太NB了… 难以理解你的思路 {:face (113):}

psp7456 发表于 2010-8-3 22:57:45

回复 24# C.L

这个太牛了,认真研究一下,附上注释就更好了。

ebhb 发表于 2010-8-3 23:08:17

回复 24# C.L

这个算法牛。

3mile 发表于 2010-8-3 23:10:38

很有意思的题目,我也写了一个算法,算1-999999999(除去含4和7的数)相加的耗时为 4MS 左右,Input框只能输 ...
C.L 发表于 2010-8-3 22:34 http://www.autoitx.com/images/common/back.gif
$p = '80.'&$pe&'72'&$pe&'72'&$pe&'72'&$pe&'72';请教下,这句是什么意思呢?

C.L 发表于 2010-8-3 23:17:43

回复 29# 3mile

1-999 = (1-99结果)*80.72727272...
1-9999 = (1-999结果)*80.072072072072...
1-99999 =(1-9999结果)*80.0072007200720072...
依次累推
页: 1 [2] 3
查看完整版本: [已解决]求从1加到999999999的高效算法