【python】挑选墙纸--CTGU计协编程部月考核

题目:

"""

题目描述:

为庆祝三峡大学建校100周年,学校购入多张墙纸以作装饰,每张墙纸为一个 n x m 的小写字母矩阵。其中,学长想挑选出能够从中读出 "ctgu" 字样的墙纸。具体来说,从墙纸的左侧至右侧选取四列,若第一列含字母 'c',第二列含字母 't',第三列含字母 'g',第四列含字母 'u',则视为好看的墙纸。选取的四列不必连续。

输入说明:

- 输入的第一行包含一个整数 t (1 <= t <= 100),表示测试用例数量。

- 随后,每个测试用例的第一行包含两个整数 n 和 m (1 <= n, m <= 20),表示墙纸的行数和列数。

- 接下来的 n 行,每行包含 m 个小写字母,描述墙纸的具体内容。

输出说明:

- 对于每个测试用例,若墙纸好看,则输出 "YES";否则,输出 "NO"。

"""

代码:

def is_beautiful_wallpaper(n, m, wallpaper):
    # 遍历墙纸的每一列,寻找包含字母 'c' 的列
    for col1 in range(m):
        # 使用列表推导式检查当前列是否包含字母 'c'
        if 'c' in [wallpaper[row][col1] for row in range(n)]:
            # 如果找到字母 'c',则从当前列的下一列开始继续遍历,寻找包含字母 't' 的列
            for col2 in range(col1 + 1, m):
                # 使用列表推导式检查当前列是否包含字母 't'
                if 't' in [wallpaper[row][col2] for row in range(n)]:
                    # 如果找到字母 't',则从当前列的下一列开始继续遍历,寻找包含字母 'g' 的列
                    for col3 in range(col2 + 1, m):
                        # 使用列表推导式检查当前列是否包含字母 'g'
                        if 'g' in [wallpaper[row][col3] for row in range(n)]:
                            # 如果找到字母 'g',则从当前列的下一列开始继续遍历,寻找包含字母 'u' 的列
                            for col4 in range(col3 + 1, m):
                                # 使用列表推导式检查当前列是否包含字母 'u'
                                if 'u' in [wallpaper[row][col4] for row in range(n)]:
                                    # 如果所有字母都被找到,则返回 "YES"
                                    return "YES"
    # 如果循环结束后还没返回,说明没有找到所有字母,返回 "NO"
    return "NO"

# 读取测试用例数量
t = int(input())
# 循环处理每个测试用例
for _ in range(t):
    # 读取墙纸的行数和列数
    n, m = map(int, input().split())
    # 读取墙纸的内容,并将其存储为一个列表,列表的每个元素是墙纸的一行
    wallpaper = [input() for i in range(n)]
    # 调用函数,检查墙纸是否好看,并输出结果
    print(is_beautiful_wallpaper(n, m, wallpaper))

你可能感兴趣的:(python,数据结构,算法,1024程序员节)