1-重组字符串

题目描述:
给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,
要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
大小写字母的数量相等时,不做转换。
输入描述:
输入为两行,第一行为参数K,第二行为字符串S。
输出描述:
输出转换后的字符串。

输入
3
12abc-abCABc-4aB@
输出
12abc-abc-ABC-4aB-@

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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位数以内的正整数;将卡片组成的多个数字,计算的最大数字。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

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__