找回密码
 加入
搜索
查看: 3780|回复: 12

[AU3基础] [已解决]求文本中任意相邻2个数字的最大和

 火.. [复制链接]
发表于 2010-4-6 19:23:35 | 显示全部楼层 |阅读模式
本帖最后由 仙乃日 于 2010-4-7 09:52 编辑

有一文本内容全是数字和星号,求文本中任意相邻2个数字和的最大值?
例如文本A.txt内容如下:
*1***4**2**1*1**1*2**1***2*******1*1***4**1*1*4*1**1**3*2*1******3****1*
2**5*2***1*1**1*1**2*****1***5*1*3*1*3**1***1***1*2*1***10**1*1*2*2*4***
*2***3*8******1**5********1*1*1****3**2***5***1*3*1*2***1**
*3***1*1*****2*1*1*3*2*7**1*1****6*2*4***3***1**2*7****2**1*1*1**4***1**

如:3*8  3+8=11   11就是这段文本中相邻2个数字的最大和。 只考滤相邻2个数字,不考滤中间夹几个星号。
像10**1  10+1=11 其中的10和1也算是相邻的2个数。

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-4-6 19:43:17 | 显示全部楼层
本帖最后由 afan 于 2010-4-6 20:08 编辑
Dim $Str = _
                '*1***4**2**1*1**1*2**1***2*******1*1***4**1*1*4*1**1**3*2*1******3****1*' & @CRLF & _
                '2**5*2***1*1**1*1**2*****1***5*1*3*1*3**1***1***1*2*1***10**1*1*2*2*4***' & @CRLF & _
                '*2***3*8******1**5********1*1*1****3**2***5***1*3*1*2***1**' & @CRLF & _
                '*3***1*1*****2*1*1*3*2*7**1*1****6*2*4***3***1**2*7****2**1*1*1**4***1**'
$sR = StringRegExp($Str, '(\d+)', 3)
Dim $out = '', $zMax = 0
For $i = 0 To UBound($sR) - 2
        $z = $sR[$i] + $sR[$i + 1]
        If $z > $zMax Then $zMax = $z
        $out &= $sR[$i] & '+' & $sR[$i + 1] & '=' & $z & @TAB
Next
MsgBox(0, 0, $out & @CRLF & @CRLF & '最大和:' & $zMax)
忘了LZ还要最大和,加上~

评分

参与人数 1金钱 +10 收起 理由
仙乃日 + 10

查看全部评分

发表于 2010-4-6 19:46:25 | 显示全部楼层
本帖最后由 afan 于 2010-4-6 20:17 编辑

不知弄这个的这个作用是?
发表于 2010-4-6 19:46:27 | 显示全部楼层
本帖最后由 水木子 于 2010-4-6 19:52 编辑

楼主出了一道很不错的练习题哦!
#include <Array.au3>
Local $avArray[1] = ['']

$Text = '*1***4**2**1*1**1*2**1***2*******1*1***4**1*1*4*1**1**3*2*1******3****1*' & @CRLF & _
                '2**5*2***1*1**1*1**2*****1***5*1*3*1*3**1***1***1*2*1***10**1*1*2*2*4***' & @CRLF & _
                '*2***3*8******1**5********1*1*1****3**2***5***1*3*1*2***1**' & @CRLF & _
                '*3***1*1*****2*1*1*3*2*7**1*1****6*2*4***3***1**2*7****2**1*1*1**4***1**'
                
MsgBox(0, '原字符串', $Text)        

$sReg = StringRegExp($Text, '\d+', 3)
For $i = 0 To UBound($sReg) - 2
        _ArrayAdd($avArray, $sReg[$i] + $sReg[$i + 1])
Next

MsgBox(0, '最大两个相邻数的和!', _ArrayMax($avArray))

评分

参与人数 2金钱 +30 收起 理由
仙乃日 + 10
afan + 20

查看全部评分

发表于 2010-4-6 20:14:58 | 显示全部楼层
忘了LZ还要最大和,2#已加上~
发表于 2010-4-6 21:46:28 | 显示全部楼层
谢谢分享!!学习了
发表于 2010-4-6 22:05:56 | 显示全部楼层
两数最大和。。。。不懂,两数相加的和还有大小分别。。。。。
发表于 2010-4-6 22:28:56 | 显示全部楼层
就是任意相邻2个数加起来之和,然后再求之和中的最大值应该是这个意思了,呵呵,学习了,看高手的代码,就是舒服。。。
 楼主| 发表于 2010-4-7 09:04:24 | 显示全部楼层
不知弄这个的这个作用是?
afan 发表于 2010-4-6 19:46


这个是用来验证一个统计推理的。感谢各位的热心帮助!实际验证之中文本的大小有150M之巨,文本每行可以首尾相连,不用回车。
再继续问一下:如果要列出相邻2个数字和大于等于5的,并且这2个数字间只夹有1个星号呢?
如:5*2       5*1     2*4   3*8
发表于 2010-4-7 09:24:18 | 显示全部楼层
本帖最后由 水木子 于 2010-4-7 11:20 编辑
Local $sText

$Text = '*1***4**2**1*1**1*2**1***2*******1*1***4**1*1*4*1**1**3*2*1******3****1*' & @CRLF & _
                '2**5*2***1*1**1*1**2*****1***5*1*3*1*3**1***1***1*2*1***10**1*1*2*2*4***' & @CRLF & _
                '*2***3*8******1**5********1*1*1****3**2***5***1*3*1*2***1**' & @CRLF & _
                '*3***1*1*****2*1*1*3*2*7**1*1****6*2*4***3***1**2*7****2**1*1*1**4***1**'

MsgBox(0, '原字符串', $Text)

$Replace = StringRegExpReplace($Text, '\*', '+')
$sReg = StringRegExp($Replace, '\d+\+\d+', 3)
For $i = 0 To UBound($sReg) - 1
        If Execute($sReg[$i]) > 5 Then $sText &= $sReg[$i] & '=' & Execute($sReg[$i]) & @CRLF
Next

MsgBox(0, '值大于5的相邻数', $sText)

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-4-7 18:41:13 | 显示全部楼层
另一问题求文本中最大的数字并且统计出各数字出现的次数?
参照楼上的 ,自己写了以下代码:
Dim $Str
$Str = FileRead("超过20期.txt")
$sR = StringRegExp($Str, '([2]\d)', 3)
Dim $zMax = 0
For $i = 0 To UBound($sR) - 2

        If $sR[$i] > $zMax Then $zMax = $sR[$i]

Next


For $i = 0 To 10
        $z = $zMax - $i
        If $z < 20 Then ExitLoop
        FileWriteLine("极限分析.txt", '不中分析:' & $z & "期 共出现(" & UBound(StringRegExp($Str, $z, 3)) & ")次")
Next
发表于 2010-4-7 18:47:50 | 显示全部楼层
这个是做一夜暴富的辅助工具吧,呵呵
 楼主| 发表于 2010-4-8 10:22:08 | 显示全部楼层
这个是做一夜暴富的辅助工具吧,呵呵
afan 发表于 2010-4-7 18:47

暴富不太可能,玩一玩乐趣也不少!

自己修改的,能输出:任意相邻2个数字之和大于9的次数和具体的结果。
Dim $Str
$Str = FileRead("单双.txt")
$sR = StringRegExp($Str, '(\d+)', 3)
Dim $out = '', $zMax = 0
For $i = 0 To UBound($sR) - 2
        $z = $sR[$i] + $sR[$i + 1]
        If $z > $zMax Then $zMax = $z
        If $z > 9 Then
                $out &= $sR[$i] & '+' & $sR[$i + 1] & '=' & $z & @CRLF
        EndIf
Next

For $i = 0 To $zMax - 10
        $z = $zMax - $i
        FileWriteLine("相邻2分析.txt", $z & "期 共出现(" & UBound(StringRegExp($out, $z, 3)) & ")次")
        $s = StringRegExp($out, '(\d+\+\d+\=)' & $z, 3)
        For $j = 0 To UBound($s) - 1
                FileWriteLine("相邻2分析.txt",  $s[$j] & $z & @CRLF)
        Next
Next
再次感谢各位的帮忙啦!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-2 10:50 , Processed in 0.078104 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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