蓝桥杯刷题记——python程序设计|七段码||字串分值|||砝码称重

1.七段码的解题思路就是排列组合,对于python来说这里需要掌握自带库itertools的基本用法,因为如果用简单的循环语句将字符串排列组合,会大大增加运行时间。关于python的自带库可以通过IDLE的help—>doc查看(或者点击F1快捷键)

import itertools
dic = {'a':['f','b'],
       'b':['a','g','c'],
       'c':['g','d','b'],
       'd':['e','c'],
       'e':['f','g','d'],
       'f':['a','g','e'],
       'g':['f','b','e','c']}
#首先将每段字符代码与它相邻的保存写成一个字典存储
AA=[]#保存每一个符和要求的字段
for i in range(2,8):#字段的最长长度为7
    aa=list(itertools.combinations('abcdefg',i))#利用自带库itertools中的函数将'abcdefg'不重复组合。
    for j in aa:
        for num in itertools.permutations(j):#将组合转成无序排列的形式
            for kk in range(len(num)-1):
                if num[kk+1] not in dic[num[kk]]:#表示两个字符之间不可相连
                   break
            else:  #这里的else有着承接上一循环结束和if相反的作用
                AA.append(num)
                break #这里的break表示这种组合存在并且已经找到了,有去除重复的作用,比如abc和acd就是一种字体
print(len(AA)+7)#7是只有一个亮的情况的字符型。AA包含了2个到7个连续的灯接管亮的的情况
                 

结果为:80
2.字串分值的思路是要理解题目:字符串的非空子集就是连续的字符串。比如abc的非空子集有:ab,bc,abc三个。所以这题用尺度分割比较合适

N=input()
for i in range(len(N)):
    for j in range(i+1,len(N)+1):
        kk=N[i:j]
        for k in kk:
            if kk.count(k)==1:
               num+=1
print(num)

输入ababc
输出:21
3.砝码称重和1一样,也是排列组合问题

import itertools
N=int(input())
Zhong=[]
fama=list(map(int,input().split()))
for i in range(1,N+1):
    for j in itertools.combinations(fama,i):
        Zhong.append(sum(j))#不同组合的重量之和,熟练使用itertools
Zhong=list(set(Zhong))
ZZ=Zhong.copy()
for i in Zhong:
    for j in Zhong:
        if i!=j:
           if abs(i-j) not in ZZ:
              ZZ.append(abs(i-j))
print(len(ZZ))

输入:3
1 4 6
输出:10

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值