1-重组字符串
题目描述:
给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,
要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
大小写字母的数量相等时,不做转换。
输入描述:
输入为两行,第一行为参数K,第二行为字符串S。
输出描述:
输出转换后的字符串。
输入
3
12abc-abCABc-4aB@
输出
12abc-abc-ABC-4aB-@
def convert_substring(substring):
lower_count = sum(1 for c in substring if c.islower())
upper_count = len(substring) - lower_count
if lower_count > upper_count:
return substring.lower()
elif upper_count > lower_count:
return substring.upper()
else:
return substring
def process_string(K, S):
parts = S.split('-')
result = [parts[0]] # 第一个子串不做处理
for part in parts[1:]:
# 每个子串按K个字符分割
for i in range(0, len(part), K):
substring = part[i:i+K]
result.append(convert_substring(substring))
return '-'.join(result)
# 读取输入
K = int(input())
S = input()
# 处理字符串并输出结果
print(process_string(K, S))
2.卡片组成的最大数字
小组中每位都有一张卡片,卡片是6位数以内的正整数;将卡片组成的多个数字,计算的最大数字。
from functools import cmp_to_key
# 自定义排序规则
def compare(x, y):
# 比较拼接后的结果
if x + y > y + x:
return -1 # x 排在前面
elif x + y < y + x:
return 1 # y 排在前面
else:
return 0 # 相等,顺序无关
def largest_number(cards):
# 将卡片转换为字符串
cards = list(map(str, cards))
# 根据自定义比较规则排序
cards.sort(key=cmp_to_key(compare))
# 拼接结果
result = ''.join(cards)
# 处理前导零的情况:如果结果是 "000...",返回 "0"
return result if result[0] != '0' else '0'
# 测试
s = input("请输入卡片数字(用逗号分隔):")
parts = s.split(',')
cards = list(map(int, parts)) # 转换为整数列表
print(largest_number(cards))
3.
__END__