【发布时间】:2017-11-02 14:49:02
【问题描述】:
鉴于question(比赛现在结束了)
- 密码完全由
n小写英文字母组成。 - 密码悠扬,表示辅音只能在旁边
元音和元音只能在辅音旁边。示例:
bawahaha - 密码不能包含字母
y(因为它既是 辅音和元音)。 - 密码的第一个字母可以是 元音或辅音。
鉴于密码的长度,n,
打印所有满足上述条件的可能密码。
输入格式
输入行包含整数(密码长度)。
约束
输出格式
打印每个可能的密码,每行一个。密码的顺序无关紧要。
我的 Python 代码:
import sys
import itertools
n = int(raw_input().strip())
consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z']
vowels = ['a', 'e', 'i', 'o', 'u']
test4 = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z', 'a', 'e', 'i', 'o', 'u']
answer = set(itertools.product(test4, repeat=n))
for letters in answer:
for j in xrange(len(letters)):
flag = 1
if j != len(letters) - 1:
if letters[j] in vowels and letters[j+1] in vowels:
flag = 0
break
if letters[j] in consonants and letters[j+1] in consonants:
flag = 0
break
if flag:
for j in letters:
sys.stdout.write(j)
print ""
有没有更好的方法来做到这一点?
【问题讨论】:
-
关于改进现有代码的问题属于 Code Review,而不是 Stack Overflow。
标签: python optimization itertools