[已解决]求文本中任意相邻2个数字的最大和
本帖最后由 仙乃日 于 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*83+8=11 11就是这段文本中相邻2个数字的最大和。 只考滤相邻2个数字,不考滤中间夹几个星号。
像10**110+1=11 其中的10和1也算是相邻的2个数。 本帖最后由 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还要最大和,加上~ 本帖最后由 afan 于 2010-4-6 20:17 编辑
不知弄这个的这个作用是? 本帖最后由 水木子 于 2010-4-6 19:52 编辑
楼主出了一道很不错的练习题哦!#include <Array.au3>
Local $avArray = ['']
$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)) 忘了LZ还要最大和,2#已加上~ 谢谢分享!!学习了 两数最大和。。。。不懂,两数相加的和还有大小分别。。。。。 就是任意相邻2个数加起来之和,然后再求之和中的最大值应该是这个意思了,呵呵,学习了,看高手的代码,就是舒服。。。 不知弄这个的这个作用是?
afan 发表于 2010-4-6 19:46 http://www.autoitx.com/images/common/back.gif
这个是用来验证一个统计推理的。感谢各位的热心帮助!实际验证之中文本的大小有150M之巨,文本每行可以首尾相连,不用回车。
再继续问一下:如果要列出相邻2个数字和大于等于5的,并且这2个数字间只夹有1个星号呢?
如:5*2 5*1 2*4 3*8 本帖最后由 水木子 于 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) 另一问题求文本中最大的数字并且统计出各数字出现的次数?
参照楼上的 ,自己写了以下代码:Dim $Str
$Str = FileRead("超过20期.txt")
$sR = StringRegExp($Str, '(\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 这个是做一夜暴富的辅助工具吧,呵呵 这个是做一夜暴富的辅助工具吧,呵呵
afan 发表于 2010-4-7 18:47 http://www.autoitx.com/images/common/back.gif
暴富不太可能,玩一玩乐趣也不少!
自己修改的,能输出:任意相邻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再次感谢各位的帮忙啦!
页:
[1]