
第一题压缩技术1.1 题目描述设某汉字由 N × N 的 0 和1 的点阵图案组成。我们依照以下规则生成压缩码。连续一组数值从汉字点阵图案的第一行第一个符号开始计算按书写顺序从左到右由上至下。第一个数表示连续有几个 0第二个数表示接下来连续有几个 1第三个数再接下来连续有几个 0第四个数接着连续几个 1以此类推……例如: 以下汉字点阵图案0001000000100000011110001000000100000010001111111对应的压缩码是 {7 3 1 6 1 6 4 3 1 6 1 6 1 3 7} 第一个数是 N ,其余各位表示交替表示0和1 的个数压缩码保证 N× N 交替的各位数之和1.2 输入格式数据输入一行由空格隔开的若干个整数表示压缩码。其中压缩码的第一个数字就是 N表示这个点阵应当是 N× N 的大小。接下来的若干个数字含义如题目描述所述。1.3 输出格式输出一个 N×N 的 01 矩阵表示最后的汉字点阵图点阵符号之间不留空格。1.4 输入输出样例输入 #1输出 #17 3 1 6 1 6 4 3 1 6 1 6 1 3 700010000001000000111100010000001000000100011111111.5 说明/提示样例解释1.6 可参考代码# 接收输入按空格分割成列表 my_list1 input().split() # 提取第一个数字 N表示点阵的大小是 N x N n int(my_list1[0]) # 计算后续压缩码的长度总长度减去第一个 N length len(my_list1) - 1 # 创建一个空列表用于存储转换后的 0 和 1 的连续字符串 my_list2 [] # 遍历压缩码中的每一个数字 for i in range(length): # 根据索引奇偶性判断当前是 0 还是 1 # i0 时对应压缩码的第 2 个数画 0i1 时对应第 3 个数画 1以此类推 if (i 1) % 2 0: # 如果是奇数索引即画 1把对应数量的 1 拼成字符串加入列表 my_list2.append(1 * (int(my_list1[i 1]))) else: # 如果是偶数索引即画 0把对应数量的 0 拼成字符串加入列表 my_list2.append(0 * (int(my_list1[i 1]))) # 将列表中所有的字符串片段无缝拼接成一个长长的完整字符串 full_string .join(my_list2) # 循环 N 次每次打印一行 for i in range(n): # 打印当前字符串的前 n 个字符即当前这一行的点阵 print(full_string[:n]) # 核心操作打印完后把前 n 个字符“切掉” full_string full_string[n:]第二题求一元二次方程可参考代码import math # 1. 接收输入并按空格拆分提取 a, b, c 并转换为浮点数 abc input().split() a, b, c float(abc[0]), float(abc[1]), float(abc[2]) # 2. 计算判别式 Δ (delta) delta b**2 - 4 * a * c # 3. 根据 Δ 的值分类讨论 if delta 0: # Δ0 时有两个相同的实数根 x -b / (2 * a) print(x1x2%.5f % x) elif delta 0: # Δ0 时有两个不同的实数根 # 用 sqrt 计算平方根根号下是 delta x_1 (-b math.sqrt(delta)) / (2 * a) x_2 (-b - math.sqrt(delta)) / (2 * a) # 题目要求 x1 较小x2 较大所以用 min 和 max 保证输出顺序 print(x1%.5f;x2%.5f % (min(x_1, x_2), max(x_1, x_2))) else: # Δ0 时无实数解 print(No answer!)以上代码可供大家参考如果大家有更好的方法也可以分享出来哈。题目来源为P1319 压缩技术 - 洛谷、B2053 求一元二次方程 - 洛谷