📜  门| GATE CS 2021 |套装2 |第57章

📅  最后修改于: 2021-06-29 06:37:21             🧑  作者: Mango

下列哪个正则表达式表示可以被3整除的所有二进制数的集合?假设字符串ϵ可被三整除。
(A) (0 + 1(01 * 0)* 1)*
(B) (0 + 11 + 10(1 + 00)* 01)*
(C) (0 *(1(01 * 0)* 1)*)*
(D) (0 + 11 + 11(1 + 00)* 00)*答案: (A) (B) (C)
说明:可被3整除的二进制数分为3类:

两个连续的1或两个1的偶数,以偶数0分隔。实际上,每对都可以“抵消”自身。
(例如11,110,1100,1001,10010,1111)

(十进制:3、6、12、9、18、15)

具有三个1的数字,每个数字之间都由0的奇数分隔。这些三胞胎也可以“取消”自身。
(例如10101、101010、1010001、1000101)

(十进制:21、42、81、69)

前两个规则的某种组合(包括彼此内部)
(例如1010111、1110101、1011100110001)

(十进制:87、117、5937)

因此,考虑到这三个规则的正则表达式很简单:

0 *(1(00)* 10 * | 10(00)* 1(00)*(11)* 0(00)* 10 *)* 0 *


这个问题的测验