找回密码
 加入
搜索
楼主: psp7456

[效率算法] [已解决]求从1加到999999999的高效算法

 火... [复制链接]
发表于 2010-8-3 16:08:12 | 显示全部楼层
回复 15# thesnow
哦,的确是这样。怎么忘了还有4开头和7开头的数了呢?
发表于 2010-8-3 16:26:55 | 显示全部楼层
牛人 啊 佩服
 楼主| 发表于 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)
发表于 2010-8-3 17:58:07 | 显示全部楼层
回复 18# psp7456


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

用前面的公式算出总量后减去.
发表于 2010-8-3 18:50:26 | 显示全部楼层
问题的关键是没有规律可言啊。
如34,41,42.....49,54.....
发表于 2010-8-3 19:47:40 | 显示全部楼层
这个有点难度,数学兼算法
发表于 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行
我想每一列都有规律吧
发表于 2010-8-3 20:47:03 | 显示全部楼层
如果4和7不参与运算的话,我想应该很难找出规律。。


个人想法。。。。
发表于 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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +80 贡献 +10 收起 理由
afan + 80 + 10 NB,学习了

查看全部评分

发表于 2010-8-3 22:40:18 | 显示全部楼层
大家看这样行不行,把带4和7的算出来,然后减呢,哪个快些?
发表于 2010-8-3 22:45:27 | 显示全部楼层
很有意思的题目,我也写了一个算法,算1-999999999(除去含4和7的数)相加的耗时为 4MS 左右,Input框只能输 ...
C.L 发表于 2010-8-3 22:34



    太NB了… 难以理解你的思路
 楼主| 发表于 2010-8-3 22:57:45 | 显示全部楼层
回复 24# C.L

这个太牛了,认真研究一下,附上注释就更好了。
发表于 2010-8-3 23:08:17 | 显示全部楼层
回复 24# C.L

这个算法牛。
发表于 2010-8-3 23:10:38 | 显示全部楼层
很有意思的题目,我也写了一个算法,算1-999999999(除去含4和7的数)相加的耗时为 4MS 左右,Input框只能输 ...
C.L 发表于 2010-8-3 22:34

$p = '80.'&$pe&'72'&$pe&'72'&$pe&'72'&$pe&'72';请教下,这句是什么意思呢?
发表于 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...
依次累推
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-13 14:46 , Processed in 0.086821 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表