(1)描述:编写程序,产生由1,2,3这3个数字符号所构成、长度为n的字符串,并且在字符串中对于任何一个子串而言,都不会有相邻的、完全相同的子串;
(2)输入:字符串长度n;
(3)输出:无相邻重复子串的所有字符串,每个字符串换行输出。

实现思路:
使用排列组合,当用户输入n,一共有333*…3*3=3**n种排列,去掉相邻重复的元素,最后得到最后的结果

import itertools
import math
def func():
  try:
      number = input("请输入位数number:")
      if number == '':
          print("输入非法,请重试")
          return
      number = int(number)
      if number <= 2 or number >= 11:
          print("输入非法,请重试")
          return
      result = set()
      for turtle in itertools.product('123', repeat=number):
          result = handleRepeated(turtle, result, number)
      result = list(result)
      result.sort()
      print('求得元素总长度:%s' % len(result))
      for item in result:
          print(item)
  except Exception as e:
      print('输入非法,请重新输入!',e)
def handleRepeated(turple,result,number):
    index = 0
    for i,iValue in enumerate(turple):
        for j, jValue in enumerate(turple):
            if j == (i+1) and math.fabs(int(jValue)-int(iValue)) >= 1:
                index+=1
    if index == number -1:
        tmp = ''
        for im in turple:
            if ('1' in  turple) and ('2' in turple) and ('3' in turple):
                tmp+=str(im)
        if tmp != '':
           result.add(int(tmp))
    return result
if __name__ == '__main__':
    func()

实现效果:
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐