【题目描述-1】
L1-010 比较大小
输入格式: 输入在一行中给出3个整数,其间以空格分隔。
输出格式: 在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例: 4 2 8
输出样例: 2->4->8
lst_int = list(map(int, input().split())) lst_int.sort() print(f'{lst_int[0]}->{lst_int[1]}->{lst_int[2]}')
【题目描述-2】
L1-008 求整数段和
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。
输入样例:
-3 8
输出样例:
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30
【个人思路】
思路没有新颖点,主要是注意输出的格式。 (我用 print('r') 时,提交结果会显示格式错误)
A, B = input('给出2个整数A和B,−100≤A≤B≤100,以空格分隔').split() # print(A, B, type(A), type(B)) i = 0 Sum = 0 for n in range(int(A), int(B)+1): i += 1 if i != 5: print('%5d' % n, end='') if i == 5: print('%5d' % n) i = 0 Sum += n if len(range(int(A), int(B)+1)) % 5 != 0: print() print('Sum = %d' % Sum)
【题目描述-3】
L1-015 跟奥巴马一起画方块
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。 2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。 现在你也跟他一起画吧!
输入格式: 输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
输出格式: 输出由给定字符C画出的正方形。但是注意到行间距比列间距大, 所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
N, char = input().split() column = int(N) row = int(column * 0.5 + 0.5) # 加 0.5 ,再int(),可以做到‘四舍五入’ # print(column, row) for r in range(0, row): for c in range(0, column): print(f'{char}', end='') print()
【题目描述-4】
L1-007 念数字
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。
十个数字对应的拼音如下:
0: ling ,1: yi ,2: er ,3: san ,4: si ,5: wu ,6: liu ,7: qi ,8: ba ,9: jiu
输入格式: 输入在一行中给出一个整数,如:1234。
提示:整数包括负数、零和正数。
输出格式: 在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。
输入样例:
-600
输出样例:
fu liu ling ling
【个人思路】
思路很简单,对输入的 N 进行遍历,拿到每一位数字,匹配该数字对应的拼音,输出即可
不过在写代码时也有几个比较特殊的地方需要考虑
N = input('在一行中给出一个整数,如:-1234') num_list = [n for n in N] # print(num_list) dct = {'0': 'ling', '1': 'yi', '2': 'er', '3': 'san', '4': 'si', '5': 'wu', '6': 'liu', '7': 'qi', '8': 'ba', '9': 'jiu'} # 创建一个字典 if int(N) < 0: print('fu', end=' ') if len(N) == 1: # 当 N 仅为一位非负整数时 print(dct[N]) else: i = 0 while True: for i in range(0, len(N)-1): # 不能取到最后一个数字,即不输出最后一个数字的拼音 key = num_list[i] if key in dct: print(dct[key], end=' ') break key = num_list[i+1] print(dct[key]) # 此处输出最后一个数字的拼音
【题目描述-5】
L1-003 个位数统计
给定一个 k 位整数 N , 请编写程序统计每种不同的个位数字出现的次数。
例如:给定 N=100311,则有 2个0,3个1,1个3。
输入格式: 每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式: 对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。 要求按 D 的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
【个人思路】
对输入的 N 进行遍历,拿到 N 的每一位数字,然后用if判断,记录每一种不同的数字它出现的次数
N = input('请输入一个不超过1000位的正整数N=') # 是1000位,不是1000 amount = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ] for i in N: # N 是 str 类型,可以对其进行遍历,遍历的结果 i 也是 str 类型 if i == '0': amount[0] += 1 elif i == '1': amount[1] += 1 elif i == '2': amount[2] += 1 elif i == '3': amount[3] += 1 elif i == '4': amount[4] += 1 elif i == '5': amount[5] += 1 elif i == '6': amount[6] += 1 elif i == '7': amount[7] += 1 elif i == '8': amount[8] += 1 else: # i == '9': amount[9] += 1 for i in range(0, 10): if amount[i] != 0: print(f'{i}:{amount[i]}')
【题目描述-6】
L1-005 考试座位号
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。 正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。 但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。 其中准考证号由 16 位数字组成,座位从 1 到 N 编号。 输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。 考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
输入样例:
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
输出样例:
3310120150912002 2
3310120150912119 1
""" (思路描述的不太清楚) 这里我用元组把学号,试机座位号,考试座位号三个要素绑定在一起 一个元组存放一个学生的信息三要素 把所有的元组放进一个列表中,这个列表相当于学生信息库 当输入待查询的试机座位号码时,匹配列表中对应元组的位置,然后输出结果 """ N = int(input()) student = [] # “学生信息库” for i in range(0, N): ID_num, test_num, exam_num = input().split() student.append((ID_num, test_num, exam_num)) M = int(input()) search = input().split(sep=' ', maxsplit=M-1) for i in range(0, M): for n in range(0, N): if search[i] == student[n][1]: print(student[n][0], student[n][2])
""" (思路描述的不太清楚) 这里我用字典把学号,考试座位号两个要素绑定在一起 把所有字典放进一个列表中 把试机座位号放进另一个列表中,作为‘索引’ 当输入待查询的试机座位号码时,匹配列表中对应字典的位置,然后输出结果 """ N = int(input()) student = [] # 存放学生信息 index = [] for i in range(0, N): ID_num, test_num, exam_num = input().split() index.append(test_num) student.append({ID_num: exam_num}) M = int(input()) search = input().split(sep=' ', maxsplit=M-1) for i in range(0, M): for n in range(0, N): if search[i] == index[n]: # n 同时作为 ID 和 student 的索引 for key in student[n]: # 遍历字典 可以拿到 key print(key, student[n][key])
【题目描述-7】
L1-011 A-B
本题要求你计算 A−B 。 不过麻烦的是,A 和 B 都是字符串 —— 即从字符串 A 中把字符串 B所 包含的字符(同种字符) 全部删掉 ,剩下的字符组成的就是字符串 A−B 。
输入格式:
输入在两行中先后给出字符串 A 和字符串 B 。 两字符串的长度都不超过 10^4,并且保证每个字符串都是由可见的 ASCII码 和 空白字符 组成,最后以换行符结束。
输出格式:
在一行中打印出 A−B 的结果字符串。
输入样例:
I love GPLT! It's a fun game!
aeiou
输出样例:
I lv GPLT! It's fn gm!
""" 【首先想到的第一个思路】 一个一个遍历,再一个一个对比,相同就删除 详细的说,就是先拿 B 中的一个字符,然后去看 A 中存不存在该字符,如果存在,就remove移除。 然后再拿 B 中的下一个字符,再去看 A 中是否存在该字符,如果存在,就移除 ...... 重复上述步骤,直到拿完 B 中的字符为止 但是!!!!!!!!!!!!! remove()函数,一次仅仅只能移除 A 中的一个字符。 倘若 A 中重复出现该字符,就需要遍历 A 一遍, 把 A 中的所有字符一个一个与该字符比较,然后一个一个移除 每从 B 中拿一个字符,就需要把 A 完整地遍历一遍 (既对 B 遍历,同时又对 A 遍历) 》》》》》》》虽然用代码去实现并不难,但是这样会导致 “运行超时” 《《《《《《《 """ '''第一次提交结果【运行超时】''' A = input('输入长度不超过10^4 且由可见的ASCII码和空白字符组成的字符串 A:') B = input('输入长度不超过10^4 且由可见的ASCII码和空白字符组成的字符串 B:') lst_A = [item for item in A] # print(lst_A) lst_B = [item for item in B] # print(lst_B) for item in lst_B: for i in lst_A: if item in lst_A: lst_A.remove(item) # print(lst_A) print(''.join(lst_A)) # 连接列表元素,输出的结果是 str 类型
""" 【对第一个思路的小改进】 有这样的情况,可能 B 自己本身中存在重复的字符,如:abcsad 这样,还包括有重复的空格 所有可以用 lst_B = list(set(lst_B)) 去掉重复元素 (虽然元素顺序是随机的,不过这里不影响) 这里利用集合元素的‘互异性’,将列表转换成集合,去掉重复元素,再转换成列表 """ '''第二次提交结果【部分正确、格式错误】''' A = input('输入长度不超过10^4 且由可见的ASCII码和空白字符组成的字符串 A:') B = input('输入长度不超过10^4 且由可见的ASCII码和空白字符组成的字符串 B:') lst_A = [item for item in A] # print(lst_A) lst_B = [item for item in B] # print(lst_B) lst_B = list(set(lst_B)) # 去掉重复元素 (虽然元素顺序是随机的,不过这里不影响) # print(lst_B) for item in lst_B: for i in lst_A: if item in lst_A: lst_A.remove(item) # print(lst_A) print(''.join(lst_A)) # 连接列表元素,输出的结果是 str 类型
""" 尝试另一种思路【输出 A 中 B 没有的字符】 (最后一种思路与前面的思路‘反过来’或者说‘颠倒过来’) 遍历 A 就行了,不用遍历 B, 直接 if item not in B ,可以直接对字符串 B 用 in / not in """ '''第三次提交结果【答案正确】''' A = input('输入长度不超过10^4 且由可见的ASCII码和空白字符组成的字符串 A:') B = input('输入长度不超过10^4 且由可见的ASCII码和空白字符组成的字符串 B:') # lst_A = [item for item in A] # print(lst_A) for item in A: if item not in B: print(item, end='') print()
【题目描述-8】
L1-002 打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。
例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式: 输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式: 首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
【个人思路】
math.sqrt(N/2 + 1/2),这个题我的思路相当于是用数学公式来计算了
事先根据图形特点,计算出组成一个完整的沙漏所需符号的个数
第一个沙漏 * 1个
第二个沙漏 *** 7个
*
***
第三个沙漏 ***** 17个
***
*
***
*****
第 n 个沙漏 ... 2 *n**2 - 1个
给定 N 个符号,对应的第 n 个沙漏
且满足:2 * (n-1)**2 - 1 ≤ N ≤ 2 * n**2 - 1
由 N ≤ 2 * n**2 - 1 ,
得 sqrt(N/2 + 1/2) ≤ n
因为 n 为整数,
所以 n = int(math.sqrt(N/2 + 1/2))
除此之外,就是实现图形打印,见代码
import math list_input = (input()).split(sep=' ') N = int(list_input[0]) char = list_input[1] n = int(math.sqrt(N/2 + 1/2)) # 打印上半部分 for row in range(1, n, 1): for i in range(1, row, 1): print(' ', end='') # 打印空格 for i in range(1, 2*n-2*(row-1), 1): print('{0}'.format(char), end='') # 打印符号 print() # 此处是沙漏的最中间,仅由一个符号组成一行 for i in range(1, n, 1): print(' ', end='') # 打印符号前面的空格 print('{0}'.format(char)) # 仅打印一个符号 # 打印下半部分 (与上半部分‘颠倒’) for row in range(1, n, 1): for i in range(1, n-row, 1): print(' ', end='') for i in range(1, 2*(row+1), 1): print('{0}'.format(char), end='') print() # 输出剩下没用掉的符号数 rest_N = N - (2 * n**2 - 1) print(rest_N)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)