趣味正则:用正则匹配3的倍数
本帖最后由 pusofalse 于 2010-3-15 20:05 编辑此题非以往的练习,只是突发奇想地想到这么个题目,有兴趣的来思考下,绝对一道是发散思维的题目。
用户输入一个10进制数,用正则判断此数是否是3的倍数,不能用运算符号和运算函数(mod)。
自己本人也没有清晰的解题思路,发上来纯粹是因为无聊加为了娱乐,没有兴趣的诸位请华丽地无视。 应该不是这个意思…… :face (32):$a = '300'
If StringRegExp($a / 3, '\.') Then
MsgBox(0, 0, $a & ' 不是3的倍数')
Else
MsgBox(0, 0, $a & ' 是3的倍数')
EndIf 本帖最后由 水木子 于 2010-3-15 20:16 编辑
老师是这意思吗?$a = InputBox('提示', '请输入一个十进制数')
If Not @error And $a <> '' Then
If StringRegExp($a / 3, '\.') Then
MsgBox(16, '匹配结果', $a & '不是3的倍数' & @CRLF & '因为: ' & $a & '/3' & '=' & $a / 3)
Else
MsgBox(64, '匹配结果', $a & '是3的倍数' & @CRLF & '因为: ' & $a & '/3' & '=' & $a / 3)
EndIf
EndIf 回复2#、3#:
不是这个意思,抱歉,怪我没说清楚,表达式中不能有任何的加减乘除和取余运算,只用正则:
$iNum = 5
StringRegExp($iNum, ???) 回复 4# pusofalse
就是嘛!是说老师怎么可能出这么简单的题,有难度再想想! 回复 5# 水木子
谢谢水木子兄抬爱,不要再叫老师了,真的不要再这样叫了。 回复 4# pusofalse
不知道能用循环不?呵呵 回复 7# afan
我想是可以这样做的。在没有实现之前,应该尽量将条件放宽一些。
结合正则和循环语句,在实现之后,再一步步加大难度,只用一句正则。 真都是高人也啊!我正在学呢 本帖最后由 afan 于 2010-3-15 20:30 编辑
回复 8# pusofalse
:face (33):Local $iNum = 5
Local $str
For $i = 1 To $iNum
$str &= '.'
Next
If StringRegExp($str, '^(...)+$') Then
MsgBox(0, 0, $iNum & ' 是3的倍数')
Else
MsgBox(0, 0, $iNum & ' 不是3的倍数')
EndIf当然这不是“趣味正则”的主题了…… 回复pusofalse
当然这不是“趣味正则”的主题了……
afan 发表于 2010-3-15 20:27 http://www.autoitx.com/images/common/back.gif
呵呵!厉害,靠数点(.)来做,真是没想到啊! 果真思路独特,妙极了~ 回复pusofalse
当然这不是“趣味正则”的主题了……
afan 发表于 2010-3-15 20:27 http://www.autoitx.com/images/common/back.gif
哈哈...高
不过太扯了, 要是$num比较大, $str不是超出范围了..... 不懂正则的飘过... 本帖最后由 水木子 于 2010-3-15 21:03 编辑
借afan前辈的思路,哎!再想想!#Include <Array.au3>
$i = InputBox('提示', '请输入一个十进制数')
Local $a[$i] = ['.']
$iNum = _ArrayToString($a, '.')
If StringRegExp($iNum, '^(...)+$') Then
MsgBox(0, 0, $i & ' 是3的倍数')
Else
MsgBox(0, 0, $i & ' 不是3的倍数')
EndIf
页:
[1]
2