栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

个人的python做题记录(四)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

个人的python做题记录(四)

  【题目描述-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 // B
R = A % B
print(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 = 0
while 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*1j
y = a2 + b2*1j
result = [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 = 0
while 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 = -N
for 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)

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号