文章目录
- 题目一: 游乐园的门票
- 1. 问题描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 5.1 解法一
- 5.2 解法二
- 题目二:小桥流水人家
- 1. 问题描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目三:小艺读书
- 1. 问题描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目四:鬼画符门之宗门大比
- 1. 问题描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 示例一
- 4.1.1 输入
- 4.1.2 输出
- 4.2 示例二
- 4.2.1 输入
- 4.2.2 输出
- 5. 答案
- 题目五:硬币划分
- 1. 问题描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目六:饿龙咆哮-逃离城堡
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目七:严查枪火
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目八:鬼画符门
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目九:收件邮箱
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目十:最长递增的区间长度
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目十一:小玉家的电费
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目十二:单词逆序
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目十三:小Q整数分割
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目十四:新型美丽数列
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
- 题目十五:熊孩子拜访
- 1. 题目描述
- 2. 数据范围
- 3. 输入描述
- 4. 输出描述
- 5. 示例
- 5.1 输入
- 5.2 输出
- 6. 答案
- 题目十六:走楼梯
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. 示例
- 4.1 输入
- 4.2 输出
- 5. 答案
注:本文内容均整合自站内文章
题目一: 游乐园的门票
1. 问题描述
某游乐园院按照游客身高段收取票价:不到 1.0米 的游客免费; 1.0~1.2 米的游客为 80 元;超过 1.2 米的游客为 150 元。
请编写一个死循环,每次循环开始先使用print()语句一行输出字符串"Please tell me your height!Enter ‘quit’ to end the program."。
如果读取到的字符串等于’quit’,则使用 break 语句退出循环,否则将字符串转成浮点数,如果小于1.0米,则使用print()语句一行输出字符串’Your admission cost is 0 yuan.‘;
如果大于等于1.0米且小于等于1.2米,则使用print()语句一行输出字符串’Your admission cost is 80 yuan.’;
如果大于1.2米,则使用print()语句一行输出字符串’Your admission cost is 150 yuan.‘。
然后本次循环结束,再次进入 while 循环中的条件测试。
2. 输入描述
保证每一行的输入只有浮点数或字符串’quit’,且保证数字合法,范围在[0, 3]。
3. 输出描述
按题目描述进行输出即可。
4. 示例
4.1 输入
0.5
1.2
quit
4.2 输出
Please tell me your height!
Enter ‘quit’ to end the program.
5. 答案
5.1 解法一
while True:
try:
print("Please tell me your height!\nEnter 'quit' to end the program.")
a = input()
if a == 'quit':
break
elif float(a) < 1.0:
print('Your admission cost is 0 yuan.')
elif 1.0 < float(a) <= 1.2:
print('Your admission cost is 80 yuan.')
else:
print('Your admission cost is 150 yuan.')
except:
break
5.2 解法二
operators_dict = {'<': 'less than','==': 'equal'}
print('Here is the original dict:')
for k in sorted(operators_dict):
print(f'Operator {k} means {operators_dict[k]}.')
print()
operators_dict['>'] = 'greater than'
print('The dict was changed to:')
for k in sorted(operators_dict):
print(f'Operator {k} means {operators_dict[k]}.')
题目二:小桥流水人家
1. 问题描述
在n*m的地图上,存在一个喷水点(x,y). 如果相邻的位置低于有水的地方,水就能流到相邻的某位置。 已知各个地方的海拔高度,求水的最大覆盖个格子数。
2. 输入描述
第一行输入n,m,x,y.(1<=n,m<=1000,1<=x<=n,1<=y<=m)
以下n行每行m个整数,表示每个格子的海拔.(1<=h<=1000)
3. 输出描述
输出最大覆盖格子数
4. 示例
4.1 输入
3 5 2 3
3 4 1 5 1
2 3 3 4 7
4 1 4 1 1
4.2 输出
6
5. 答案
class Solution:
def __init__(self) -> None:
pass
def changshi(self, vector, matrix, n, m, a, b):
ll = [[-1, 0], [1, 0], [0, -1], [0, 1]]
for i in range(4): # 四边寻找 上下右左
a1 = a + ll[i][0]
b1 = b + ll[i][1]
if 0 <= a1 <= n - 1 and 0 <= b1 <= m - 1:
if vector[a][b] > vector[a1][b1]: # 若找到
matrix[a1][b1] = 1 # 标记位置
self.changshi(vector, matrix, n, m, a1, b1)
return matrix
def solution(self, n, m, x, y, vector):
result = 0
a, b = n - y, x - 1
matrix = [[0 for i in range(m)] for i in range(n)]
matrix[n - y][x - 1] = 1
matrix = self.changshi(vector, matrix, n, m, a, b)
for i in range(n):
for j in range(m):
if matrix[i][j] == 1:
result = result + 1
print(matrix)
return result
if __name__ == "__main__":
arr_temp = [int(item) for item in input().strip().split()]
n = int(arr_temp[0])
m = int(arr_temp[1])
x = int(arr_temp[2])
y = int(arr_temp[3])
vector = []
for i in range(n):
vector.append([int(item) for item in input().strip().split()])
sol = Solution()
result = sol.solution(n, m, x, y, vector)
print(result)
题目三:小艺读书
1. 问题描述
书是人类进步的阶梯。
小艺每周因为工作的原因会选择性的每天多读几页或者少读几页。
小艺想知道一本n页的书她会在周几读完。
2. 输入描述
第一行输入n(1<=n<=1000);
第二行输入7个整数,分别表示周一~周日的读书页数p(0<=p<=1000)。(不考虑7个整数都为0的情况)
3. 输出描述
输出答案。(1-7)
4. 示例
4.1 输入
100
15 20 20 15 10 30 45
4.2 输出
6
5. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, pages):
result = None
# TODO: 请在此编写代码
page=sum(pages)
book=n%page
for i in range(7):
book-=pages[i]
if(book<=0):
result=i+1
break
return result
if __name__ == "__main__":
n = int(input().strip())
pages = [int(item) for item in input().strip().split()]
sol = Solution()
result = sol.solution(n, pages)
print(result)
题目四:鬼画符门之宗门大比
1. 问题描述
给定整数序列A。
求在整数序列A中连续权值最大的子序列的权值。
2. 输入描述
第一行输入整数n.(1<=n<=1000)
第二行输入n整数a。(-1000<=a<=1000)
3. 输出描述
输出子序列最大权值。
4. 示例
4.1 示例一
4.1.1 输入
5
-1 2 3 -2 4
4.1.2 输出
7
4.2 示例二
4.2.1 输入
7
1 -4 6 7 -10 8 0
4.2.2 输出
11
5. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, arr):
result = None
# TODO: 请在此编写代码
num=[]
m=0
for i in arr:
m+=i
if m<=0:
m=0
else:
num.append(m)
result=max(num)
return result
if __name__ == "__main__":
n = int(input().strip())
arr = [int(item) for item in input().strip().split()]
sol = Solution()
result = sol.solution(n, arr)
print(result)
题目五:硬币划分
1. 问题描述
有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n<100000),有多少中组合可以组成n分钱?
2. 输入描述
输入整数n.(1<=n<=100000)
3. 输出描述
输出组合数,答案对1e9+7取模。
4. 示例
4.1 输入
13
4.2 输出
16
5. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, n):
result = None
# TODO: 请在此编写代码
coins=[1,2,5,10]
arr=[0]*1000001
arr[0]=1
for i in coins:
for j in range(i,n+1):
arr[j]=(arr[j]+arr[j-i])%(1e9+7)
result=int(arr[n])
return result
if __name__ == "__main__":
n = int(input().strip())
sol = Solution()
result = sol.solution(n)
print(result)
题目六:饿龙咆哮-逃离城堡
1. 题目描述
小艺酱误入龙族结界,被恶龙带回城堡,小艺酱决定逃离城堡,逃离龙族结界。总路程为c, 小艺酱的速度是vp,饿龙速度为vd。饿龙会在t小时后发现小艺酱出逃。小艺酱担心自己跑不出去,准备了好多珍宝。 每当饿龙追上自己的时候小艺酱就会丢下一个珍宝,饿龙捡到珍宝会返回自己的城堡进行研究,研究f小时后,再出城堡追赶小艺。小艺想知道自己至少需要丢多少珍宝才能让自己安全逃出结界。
2. 输入描述
输入整数vp,vd,t,f,c。(1<=vp,cd<=100,1<=t,f<=10,1<=c<=1000)
3. 输出描述
输出答案。
4. 示例
4.1 输入
1
2
1
1
10
4.2 输出
2
5. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, vp, vd, t, f, c):
result = None
# TODO: 请在此编写代码
result=0
sp=vp*t
while sp<c:
if vd-vp<=0:
return 0
rt=sp/(vd-vp)
sp+=vp*rt
if sp<c:
result+=1
sp+=vp*(rt+f)
return result
if __name__ == "__main__":
vp = int(input().strip())
vd = int(input().strip())
t = int(input().strip())
f = int(input().strip())
c = int(input().strip())
sol = Solution()
result = sol.solution(vp, vd, t, f, c)
print(result)
题目七:严查枪火
1. 题目描述
X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。 现在小Q查获了一批违禁物品其中部分是枪支。
小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)
2. 输入描述
第一行输入整数n.(1<=n<=10000)表示携带违禁物品的人数。
以下n行表示违禁物品的名称。
3. 输出描述
输出需要按照私藏枪火来关押的人。
4. 示例
4.1 输入
3
Dsd
ak
232asd
4.2 输出
1
5. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, vector):
result = None
# TODO: 请在此编写代码
result = 0
for i in range(n):
if vector[i]=="ak" or vector[i]=="m4a1" or vector[i]=="skr":
result+=1
return result
if __name__ == "__main__":
n = int(input().strip())
vector = []
for i in range(n):
vector.append(input().strip())
s = Solution()
result = s.solution(n, vector)
print(result)
题目八:鬼画符门
1. 题目描述
鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理, 但是这次鬼艺接手了, 你能帮鬼艺写一个程序统计每年消耗数量最多的鬼画符吗?
2. 输入描述
第一行输入整数n.(1<=n<=1000)
以下n行输入n个字符串。
3. 输出描述
输出答案字符串。
4. 示例
4.1 输入
5
red
red
green
grenn
hen
4.2 输出
red
5. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, vector):
result = None
# TODO: 请在此编写代码
dict={}
for i in vector:
if i not in dict:
dict[i]=1
else:
dict[i]+=1
t=max(dict.values())
for k,v in dict.items():
if v==t:
result=k
break
return result
if __name__ == "__main__":
n = int(input().strip())
vector = []
for i in range(n):
vector.append(input().strip())
s = Solution()
result = s.solution(n, vector)
print(result)
题目九:收件邮箱
1. 题目描述
已知字符串str,str表示邮箱的不标准格式。
其中”.”会被记录成”dot”,”@”记录成”at”。
写一个程序将str转化成可用的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)
2. 输入描述
输入字符串str.(1<=strlen(str)<=1000)
3. 输出描述
输出转化后的格式。
4. 示例
4.1 输入
mxyatoxcoderdotcom
4.2 输出
mxy@oxcoder.com
5. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, str):
result = None
# TODO: 请在此编写代码
result=str.replace('dot','.')
result=result.replace('at','@',1)
if result[0]==".":
result="dot"+result[1:]
if result[0]=="@":
result="at"+result[1:]
if result[-1]==".":
result=result[:-1]+"dot"
if result[-1]=="@":
result=result[:-1]+"at"
return result
if __name__ == "__main__":
str = input().strip()
s = Solution()
result = s.solution(str)
print(result)
题目十:最长递增的区间长度
1. 题目描述
给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3
2. 输入描述
第一行输入整数n。(1<=n<=10000)表示数组的大小
第二行给出n个整数a.(-1e9<=a<=1e9)
3. 输出描述
输出转化后的格式。
4. 示例
4.1 输入
6
5 2 3 8 1 9
4.2 输出
3
5. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, arr):
result = None
# TODO: 请在此编写代码
result=0
t=1
arr.append(-1e9-1)
for i in range(n):
if arr[i+1]>arr[i]:
t+=1
else:
result=max(result,t)
t=1
return result
if __name__ == "__main__":
n = int(input().strip())
arr = [int(item) for item in input().strip().split()]
s = Solution()
result = s.solution(n, arr)
print(result)
题目十一:小玉家的电费
1. 题目描述
小玉家今天收到了一份电费通知单。上面写着:月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行;月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行;月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行。请根据电价规定,计算出应交的电费应该是多少。
2. 输入描述
输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。
3. 输出描述
输出一个数,保留到小数点后1位(单位以元计,保留到小数点后一位)。
4. 示例
4.1 输入
267
4.2 输出
121.5
5. 答案
import sys
amount = int(sys.stdin.readline().strip())
result = 0
if amount <= 150:
result = 0.4463 * amount
elif 151 <= amount <= 400:
result = 0.4463 * 150 + 0.4663 * (amount - 150)
else:
result = 0.4463 * 150 + 0.4663 * 250 + 0.5663 * (amount - 400)
print('%.1f' % result) # 注意保留小数位
题目十二:单词逆序
1. 题目描述
对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整。例如:输入“I am a boy!”,输出“boy! a am I”。
2. 输入描述
输入一行字符串str。(1 <= strlen(str) <= 10000)
3. 输出描述
返回逆序后的字符串。
4. 示例
4.1 输入
It’s a dog!
4.2 输出
dog! a It’s
5. 答案
import sys
s = sys.stdin.readline().strip().replace('\n', '')
lst = s.split(' ')
for i in range(len(lst) - 1, -1, -1):
print(lst[i], end='')
if i != 0:
print(' ', end='')
题目十三:小Q整数分割
1. 题目描述
小Q决定吧一个整数n,分割成k个整数。
每个整数必须大于等于1。
小Q有多少方案。
2. 输入描述
输入整数n,k。(1 <= n, k<= 100)
3. 输出描述
输出方案数。答案对1e9+7取模。
4. 示例
4.1 输入
3 3
4.2 输出
1
5. 答案
import sys
n, k = map(int, sys.stdin.readline().split())
if k > n: # 特判下k > n的情况
print(0)
sys.exit()
a = b = 1
for i in range(1, k):
a *= (n - i)
b *= i
a /= b
print('%.0f' % (a % (1e9 + 7)))
题目十四:新型美丽数列
1. 题目描述
定义美丽数列A:
- 数列中相邻的数越是靠内相对大小加一,a[2]=a[1]+1,a[n-2]=a[n-1]+1…
- 距离边缘距离相等的数的大小相等:a[0] = a[n-1],a[1] = a[n-2]…
通过修改数列中的值使得给定数列变成美丽数列。
修改后的值必须仍是正整数。
小Q有多少方案。
2. 输入描述
第一行输入整数n。(1 <= n <= 1000)表示数列的大小。
第二行输入n个整数。
3. 输出描述
输出最小修改次数。
4. 示例
4.1 输入
3
1 1 1
4.2 输出
1
5. 答案
import math
import sys
def diffnum(list):
map = {}
for index in range(len(list)):
map[str(index)] = str(list[index] - index)
return map
def countnum(map):
map1 = {}
for key,value in map.items():
if value in map1.keys():
map1[str(value)] = map1[str(value)] + 1
else:
map1[str(value)] = 1
return map1
list = [1,2,3,2,5,8,5,4,5,2,1]
split_num = math.ceil(len(list) / 2)
left_list_num = diffnum(list[0:split_num])
left_list_count = countnum(left_list_num)
list_re = list[::-1]
right_list_num = diffnum(list_re[0:split_num])
right_list_count = countnum(right_list_num)
sum_map = left_list_count.copy()
for key,value in right_list_count.items():
if key in sum_map.keys():
sum_map[key] = sum_map[key] + value
else:
sum_map[key] = value
max_value = sorted(sum_map.values())[-1]
log = sys.maxsize
for key,value in sum_map.items():
if max_value == value:
log = key
break
if log == sys.maxsize:
print("错误")
exit(1)
count = 0
for key,value in left_list_num.items():
if value != log :
list[int(key)] = list[int(key)] + (int(log) - int(value))
count = count + 1
list = list[::-1]
num_log = 0
if len(list) % 2 !=0:
num_log = 1
for key,value in right_list_num.items():
if num_log == 1 and key == str(split_num-1):
break
if value != log :
list[int(key)] = list[int(key)] + (int(log) - int(value))
count = count + 1
print(count)
print(list)
题目十五:熊孩子拜访
1. 题目描述
已知存在一个长度为n的整数序列A,A中所有元素按照从小到大排序,现在执行倒置一段序列。请你找出A序列的倒置子序列。如果没有,输出“0 0”。
2. 数据范围
1<=n<=1000
1<=num<=10000
3. 输入描述
第一行输入整数n。(1 <= n <= 1000)表示数列的大小。
第二行输入n个整数。
4. 输出描述
输出最小修改次数。
5. 示例
5.1 输入
4
1 3 2 4
5.2 输出
2 3
6. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, arr):
result = []
# 保存右值
max = 0
# 保存左值
min = 0
next = 0
for item in arr:
if next>item and item>max:
max=next
min=item
elif next<min and item>max:
min=next
next=item
result.append(str(min))
result.append(str(max))
if len(result)==0:
result=["0","0"]
return result
if __name__ == "__main__":
n = int(input().strip())
arr = [int(item) for item in input().strip().split()]
sol = Solution()
result = sol.solution(n, arr)
print(" ".join(result))
题目十六:走楼梯
1. 题目描述
现在有一截楼梯, 根据你的腿长, 你一次能走 1 级或 2 级楼梯, 已知你要走 n 级楼梯才能走到你的目的楼层, 请实现一个方法, 计算你走到目的楼层的方案数。
2. 输入描述
输入你要去的楼层。
3. 输出描述
输出你走到目的楼层的方案数。
4. 示例
4.1 输入
5
4.2 输出
8
5. 答案
class Solution:
def __init__(self) -> None:
pass
def solution(self, n):
if isinstance(n, int) and n > 0:
basic_dic = {1: 1, 2: 2}
if n in basic_dic.keys():
return basic_dic[n]
else:
return self.solution(n - 1) + self.solution(n - 2)
else:
return False
if __name__ == "__main__":
n = int(input().strip())
sol = Solution()
result = sol.solution(5)
print(result)