找回密码
 加入
搜索
查看: 10789|回复: 27

[效率算法] 趣味正则:用正则匹配3的倍数

 火... [复制链接]
发表于 2010-3-15 19:27:59 | 显示全部楼层 |阅读模式
本帖最后由 pusofalse 于 2010-3-15 20:05 编辑

此题非以往的练习,只是突发奇想地想到这么个题目,有兴趣的来思考下,绝对一道是发散思维的题目。
用户输入一个10进制数,用正则判断此数是否是3的倍数,不能用运算符号和运算函数(mod)。
自己本人也没有清晰的解题思路,发上来纯粹是因为无聊加为了娱乐,没有兴趣的诸位请华丽地无视。

评分

参与人数 1金钱 +10 收起 理由
大绯狼 + 10 \b(?:[0369]+|[147](?:[0369]*[147][0369]

查看全部评分

发表于 2010-3-15 19:48:24 | 显示全部楼层
应该不是这个意思……
$a = '300'
If StringRegExp($a / 3, '\.') Then
        MsgBox(0, 0, $a & ' 不是3的倍数')
Else
        MsgBox(0, 0, $a & ' 是3的倍数')
EndIf
发表于 2010-3-15 19:49:40 | 显示全部楼层
本帖最后由 水木子 于 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
 楼主| 发表于 2010-3-15 20:02:46 | 显示全部楼层
回复2#、3#:
不是这个意思,抱歉,怪我没说清楚,表达式中不能有任何的加减乘除和取余运算,只用正则:
$iNum = 5
StringRegExp($iNum, ???)
发表于 2010-3-15 20:04:46 | 显示全部楼层
回复 4# pusofalse
就是嘛!是说老师怎么可能出这么简单的题,有难度再想想!
 楼主| 发表于 2010-3-15 20:08:39 | 显示全部楼层
回复 5# 水木子

    谢谢水木子兄抬爱,不要再叫老师了,真的不要再这样叫了。
发表于 2010-3-15 20:11:10 | 显示全部楼层
回复 4# pusofalse


    不知道能用循环不?呵呵
 楼主| 发表于 2010-3-15 20:21:43 | 显示全部楼层
回复 7# afan


    我想是可以这样做的。在没有实现之前,应该尽量将条件放宽一些。
结合正则和循环语句,在实现之后,再一步步加大难度,只用一句正则。
发表于 2010-3-15 20:22:06 | 显示全部楼层
真都是高人也啊!我正在学呢
发表于 2010-3-15 20:27:16 | 显示全部楼层
本帖最后由 afan 于 2010-3-15 20:30 编辑

回复 8# pusofalse


   
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
当然这不是“趣味正则”的主题了……

评分

参与人数 3金钱 +110 收起 理由
sleep365 + 40 精彩的算法,把数学和正则表达式联合了,高 ...
jhwl + 20 此方法甚好~
pusofalse + 50 学习了。

查看全部评分

发表于 2010-3-15 20:33:36 | 显示全部楼层
回复  pusofalse


    当然这不是“趣味正则”的主题了……
afan 发表于 2010-3-15 20:27

呵呵!厉害,靠数点(.)来做,真是没想到啊!
 楼主| 发表于 2010-3-15 20:36:37 | 显示全部楼层
果真思路独特,妙极了~
发表于 2010-3-15 20:37:08 | 显示全部楼层
回复  pusofalse


    当然这不是“趣味正则”的主题了……
afan 发表于 2010-3-15 20:27


哈哈...高
不过太扯了, 要是$num比较大, $str不是超出范围了.....
发表于 2010-3-15 20:37:39 | 显示全部楼层
不懂正则的飘过...
发表于 2010-3-15 21:02:25 | 显示全部楼层
本帖最后由 水木子 于 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金钱 +50 收起 理由
pusofalse + 50 学习了

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-15 16:46 , Processed in 0.094700 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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