总决式
本题用到了贪心算法,根据局部找最优解。
破题式:-需求分析
输入:两种输入类型:
- 第一行的数字:代表后面有几个名字要计算
- 第二种输入:代表后边计算的名字
输出:依次计算输出名字的‘漂亮度’
破阵式:-拆解需求
- 封装一个计算任意名字‘漂亮度’的函数,
- 入参:单个名字
- 返回值:该名字的"漂亮度“
- 循环调用函数,循环次数就是第一行的数字
破气式:-思路打法
难点式计算漂亮度。
名字的字母为字典的键名,字母的出现次数为字典的键值。
例如:zhangsan →{'z': 1, 'h': 1, 'a': 2, 'n': 2, 'g': 1, 's': 1}
但后对字典进行按照值排序的对象→对该对象进行遍历,然后计算漂亮总和
独孤九剑 -上代码
def pretty_num(name): """ 封装计算名字的’漂亮度‘ :param name: 名字 :return: 名字的漂亮度 """ d = {} # 赋值空字典,保存名字中字母和出现次数 l=[] # 赋值空列表,对名字元素是否从重复,进行判断 for i in name: # 遍历名字的字符串 if i in l: # 判断是否重复 d[i] += 1 # 如果重复,对应字母的次数加 1 else: d[i] = 1 # 如果不重复,对应字母和次数1 加入字典 l.append(i) # 把这个字母加入列表,后面校验其是否重复 # 开始计算’漂亮度‘ pretty = 0 # 初始化 漂亮度 m = 26 # 贪心算法 开始计算 for i in sorted(d.values(), reverse=True): # 对字典的值进行从大到小排序 pretty += i * m # 累加:该字母的漂亮度,出现次数*漂亮值 m -= 1 # 漂亮值累减 return pretty a = int(input()) for i in range(a): print(pretty_num(input()))