欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

个人的python做题记录(四)

时间:2023-05-28

  【题目描述-1】

1017 A除以B
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

输入格式: 输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

输出格式: 在一行中依次输出 Q 和 R,中间以 1 空格分隔。

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

A, B = map(int, input().split())Q = A // BR = A % Bprint(Q, R)


【题目描述-2】

7-28 猴子选大王

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。 从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。 如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式: 输入在一行中给一个正整数N(≤1000)。

输出格式: 在一行中输出当选猴王的编号。

输入样例:

11

输出样例:

7

'''我认为这个题的关键点是“让猴子围成一圈报数”。'''N = int(input())lst = [i for i in range(1, N+1)] # 存放猴子的编号flag = 0while len(lst) != 1: copy_lst = lst.copy() # 用 lst.copy(),id(lst) != id(copy_lst) # print(id(lst), id(copy_lst)) flag = flag # 关键点 --> 实现围圈报数 for i in copy_lst: flag += 1 # 进行报数 if flag == 3: # 当报数为‘3’时 lst.remove(i) # 从 lst 中移除编号 flag = 0 # 置零,这样数到3就行,不必数到3的倍数print(lst[0]) # 输出最后仅剩的一名猴子的编号


 【题目描述-3】

7-29 删除字符串中的子串

输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

输入格式: 输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。

输出格式: 在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。

输入样例:

Tomcat is a male ccatat cat

输出样例:

Tom is a male 

s1 = input()s2 = input()# 这里有个陷阱:当从之间删除一个目标子串之后,字符串前后合起来又会出现目标子串# 所以这里可以用 while s2 in s1:while s2 in s1: s1 = s1.replace(s2, '')print(s1)


 【题目描述-4】

7-32 说反话-加强版

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。 字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式: 每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

sample = input()if sample.isspace(): print()# print(sample)# print(sample[::-1])else: sample = sample.split() for i in sample[:0:-1]: # 将步长step设置成负数,以达到“逆序输出”(说反话) print(i, end=' ') print(sample[0])


【题目描述-5】

7-36 复数四则运算

本题要求编写程序,计算2个复数的和、差、积、商。

输入格式: 输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部。题目保证C2不为0。

输出格式: 分别在4行中按照(a1+b1i) 运算符 (a2+b2i) = 结果的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。 如果结果的实部或者虚部为0,则不输出。如果结果为0,则输出0.0。

输入样例1:

2 3.08 -2.04 5.06

输出样例1:

(2.0+3.1i) + (-2.0+5.1i) = 8.1i

(2.0+3.1i) - (-2.0+5.1i) = 4.0-2.0i

(2.0+3.1i) * (-2.0+5.1i) = -19.7+3.8i

(2.0+3.1i) / (-2.0+5.1i) = 0.4-0.6i

输入样例2:

1 1 -1 -1.01

输出样例2:

(1.0+1.0i) + (-1.0-1.0i) = 0.0

(1.0+1.0i) - (-1.0-1.0i) = 2.0+2.0i

(1.0+1.0i) * (-1.0-1.0i) = -2.0i

(1.0+1.0i) / (-1.0-1.0i) = -1.0

【个人思路】

主要注意输出的格式要求

a1, b1, a2, b2 = map(float, input().split())"""复数的运算"""x = a1 + b1*1jy = a2 + b2*1jresult = [x + y, x - y, x * y, x / y]'''为输出等号的左边内容做准备'''a1 = float('%.1f' % a1)b1 = float('%.1f' % b1)a2 = float('%.1f' % a2)b2 = float('%.1f' % b2)x1 = f'({a1}{b1}i)'y1 = f'({a2}{b2}i)'if b1 >= 0: x1 = f'({a1}+{b1}i)'if b2 >= 0: y1 = f'({a2}+{b2}i)'char = ['+', '-', '*', '/']'''输出result结果,也就是等号的右边内容'''for i in range(4): s = '%.1f%.1fi' % (result[i].real, result[i].imag) if result[i].imag > 0: s = '%.1f+%.1fi' % (result[i].real, result[i].imag) # 一个符号 “+” if -0.1 <= result[i].real < 0.1: s = '%.1fi' % result[i].imag if -0.1 < result[i].imag < 0.1: # 这两个含有 imag 虚部的 if 语句的先后顺序不能随意改变 s = '%.1f' % result[i].real if result[i].real == 0 and result[i].imag == 0: # print(0.0 == 0) --> True s = '0.0' # print(f'{x1} {char[i]} {y1} = ' + s) # print内容 一致,等价 print(f'{x1} {char[i]} {y1} = {s}')


【题目描述-6】

L1-032 Left-pad

根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码, 其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。 这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。 例如用*去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是******GPLT。 Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。

输入格式: 输入在第一行给出一个正整数N(≤10^4)和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。 第二行给出原始的非空字符串,以回车结束。

输出格式: 在一行中输出结果字符串。

输入样例1:

15 _ I love GPLT

输出样例1:

____I love GPLT

输入样例2:

4 * this is a sample for cut

输出样例2:

cut

lst = input().split()N = int(lst[0])char = lst[1]string = [i for i in input()]# print(string)while len(string) <= N: string.insert(0, char)for i in string[len(string)-N:]: # 巧妙设置索引 star=len(string)-N print(i, end='')print()


【题目描述-7】

L1-033 出生年

(此处省略图片)

以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。

本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

输入格式: 输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。 注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

输出格式: 根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。

注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

输入样例1:

1988 4

输出样例1:

25 2013

输入样例2:

1 2

输出样例2:

0 0001

【个人思路】

利用集合数据类型--互异性,计算不同数字的个数

year, n = map(int, input().split())flag = 0while True: set_year = set() # 每次循环之前,要对集合“置空” for i in '%04d' % year: set_year.add(i) if len(set_year) == n: print(flag, '%04d' % year) break year += 1 flag += 1


【题目描述-8】

L1-034 点赞

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。 每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。

本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式: 输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。 随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1 ⋯ Fk”, 其中1≤K≤10,Fi(i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。

输出格式: 统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。 如果有并列,则输出编号最大的那个。

输入样例:

4

3 889 233 2

5 100 3 233 2 73

4 3 73 889 2

2 233 123

输出样例:

233 3

【个人思路】

对输入的数据按从小到大排序,计数

N = int(input())library_list = []for i in range(N): lst = [i for i in input().split()] for a in lst[1:]: library_list.append(a)lib = set()for i in library_list: lib.add(i)lst_2 = [int(i) for i in lib]lst_2.sort()# print(lst_2)count_list = []for i in lst_2: count_list.append(library_list.count(str(i)))# print(count_list)# print(lib[count_list.index(max(count_list))], max(count_list))for i in lst_2[::-1]: if count_list[lst_2.index(i)] == max(count_list): print(i, max(count_list)) break


【题目描述-9】

L1-035 情人节

(此处省略图片)

以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。 现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。

输入格式: 输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空单词,以回车结束。 一个英文句点.标志输入的结束,这个符号不算在点赞名单里。

输出格式: 根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are inviting you to dinner...”; 若只有A没有B,则输出“A is the only one for you...”;若连A都没有,则输出“Momo..、No one is for you ...”。

输入样例1:

GaoXZh

Magi

Einst

Quark

LaoLao

FatMouse

ZhaShen

fantacy

latesum

SenSen

QuanQuan

whatever

whenever

Potaty

hahaha

输出样例1:

Magi and Potaty are inviting you to dinner..、

输入样例2:

LaoLao

FatMouse

whoever

输出样例2:

FatMouse is the only one for you..、

输入样例3:

LaoLao

输出样例3:

Momo..、No one is for you ...

【个人思路】

用列表存放名字,按索引输出 

list_name = []# “输入”while True: name = input() if name == '.': break list_name.append(name)# “输出”if len(list_name) >= 14: print(f'{list_name[1]} and {list_name[13]} are inviting you to dinner...')elif 2 <= len(list_name): print(f'{list_name[1]} is the only one for you...')else: print('Momo..、No one is for you ...')


【题目描述-10】

L1-037 A除以B

真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。

输入格式: 输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。

输出格式: 在一行中输出结果:如果分母是正数,则输出“A/B=商”; 如果分母是负数,则要用括号把分母括起来输出; 如果分母为零,则输出的商应为Error。 输出的商应保留小数点后2位。

输入样例1:

-1 2

输出样例1:

-1/2=-0.50

输入样例2:

1 -3

输出样例2:

1/(-3)=-0.33

输入样例3:

5 0

输出样例3:

5/0=Error

A, B = map(int, input().split())result = ''if B != 0: result = '%.2f' % (int(A)/int(B))if B == 0: result = 'Error'if B < 0: B = f'({B})'string = f'{A}/{B}='print(string+result)


【题目描述-11】

L1-039 古风排版

中国的古人写文字,是从右向左竖向排版的。

本题就请你编写程序,把一段文字按古风排版。

输入格式: 输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式: 按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4

This is a test case

输出样例:

asa T

st ih

e tsi

 ce s

"""用空白填补,然后打印"""N = int(input())string = input()while len(string) % N != 0: string = string + ' ' # 用空白填补start = -Nfor i in range(0, N): begin = start+i for s in string[begin::-N]: # 步长 step 设置成负数 print(s, end='') print()


【题目描述-12】

L1-040 最佳情侣身高差

专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。 如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。 下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。

输入格式: 输入第一行给出正整数N(≤10),为前来查询的用户数。 随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。

输出格式: 对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。

输入样例:

2

M 1.75

F 1.8

输出样例:

1.61

1.96

N = int(input())for i in range(N): sex, height = input().split() if sex == 'M': print('%.2f' % (float(height) / 1.09)) if sex == 'F': print('%.2f' % (float(height) * 1.09))


【题目描述-13】

L1-041 寻找250

对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。

输入格式: 输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式: 在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。

输入样例:

888 666 123 -233 250 13 250 -222

输出样例:

5

lst = input().split()print(lst.index('250')+1)


【题目描述-14】

L1-042 日期格式化

世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。 下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

输入格式: 输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式: 在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

输入样例:

03-15-2017

输出样例:

2017-03-15

mm, dd, yy = input().split(sep='-')print(f'{yy}-{mm}-{dd}')

 


【题目描述-15】

L1-046 整除光棍

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。 传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。 然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。 这样的解当然不是唯一的,题目要求你输出最小的解。

提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。 但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。

输入格式: 输入在一行中给出一个不以5结尾的正奇数x(<1000)。

输出格式: 在一行中输出相应的最小的s和n,其间以1个空格分隔。

输入样例:

31

输出样例:

3584229390681 15

x = int(input())i = '1'while int(i) % x != 0: i = i + '1'print(int(i) // x, len(i))

 


【题目描述-16】

L1-047 装睡

你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡! 医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。 下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。

输入格式: 输入在第一行给出一个正整数N(≤10)。 随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。

输出格式: 按照输入顺序检查每个人,如果其至少一项指标不在正常范围内,则输出其名字,每个名字占一行。

输入样例:

4

Amy 15 70

Tom 14 60

Joe 18 50

Zoe 21 71

输出样例:

Tom

Zoe

huxi = range(15, 21)maibo = range(50, 71)N = int(input())for i in range(N): name, h, m = input().split() if int(h) in huxi and int(m) in maibo: continue else: print(name)

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。