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__