【站内题解】十六道csdn每日一练Python题解
文章目錄
- 題目一: 游樂園的門票
- 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':breakelif 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:break5.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:passdef 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 matrixdef solution(self, n, m, x, y, vector):result = 0a, b = n - y, x - 1matrix = [[0 for i in range(m)] for i in range(n)]matrix[n - y][x - 1] = 1matrix = 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 + 1print(matrix)return resultif __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:passdef solution(self, n, pages):result = None# TODO: 請在此編寫代碼page=sum(pages)book=n%pagefor i in range(7):book-=pages[i]if(book<=0):result=i+1breakreturn resultif __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:passdef solution(self, n, arr):result = None# TODO: 請在此編寫代碼num=[]m=0for i in arr:m+=iif m<=0:m=0else:num.append(m)result=max(num)return resultif __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:passdef solution(self, n):result = None# TODO: 請在此編寫代碼coins=[1,2,5,10]arr=[0]*1000001arr[0]=1for i in coins:for j in range(i,n+1):arr[j]=(arr[j]+arr[j-i])%(1e9+7)result=int(arr[n])return resultif __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:passdef solution(self, vp, vd, t, f, c):result = None# TODO: 請在此編寫代碼result=0sp=vp*twhile sp<c:if vd-vp<=0:return 0rt=sp/(vd-vp)sp+=vp*rtif sp<c:result+=1sp+=vp*(rt+f)return resultif __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:passdef solution(self, n, vector):result = None# TODO: 請在此編寫代碼result = 0for i in range(n):if vector[i]=="ak" or vector[i]=="m4a1" or vector[i]=="skr":result+=1return resultif __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:passdef solution(self, n, vector):result = None# TODO: 請在此編寫代碼dict={}for i in vector:if i not in dict:dict[i]=1else:dict[i]+=1t=max(dict.values())for k,v in dict.items():if v==t:result=kbreakreturn resultif __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:passdef 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 resultif __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:passdef solution(self, n, arr):result = None# TODO: 請在此編寫代碼result=0t=1arr.append(-1e9-1)for i in range(n):if arr[i+1]>arr[i]:t+=1else:result=max(result,t)t=1return resultif __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 sysamount = int(sys.stdin.readline().strip()) result = 0if 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 syss = 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 sysn, 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 *= ia /= b print('%.0f' % (a % (1e9 + 7)))題目十四:新型美麗數列
1. 題目描述
定義美麗數列A:
通過修改數列中的值使得給定數列變成美麗數列。
修改后的值必須仍是正整數。
小Q有多少方案。
2. 輸入描述
第一行輸入整數n。(1 <= n <= 1000)表示數列的大小。
第二行輸入n個整數。
3. 輸出描述
輸出最小修改次數。
4. 示例
4.1 輸入
3
1 1 1
4.2 輸出
1
5. 答案
import math import sysdef diffnum(list):map = {}for index in range(len(list)):map[str(index)] = str(list[index] - index)return mapdef countnum(map):map1 = {}for key,value in map.items():if value in map1.keys():map1[str(value)] = map1[str(value)] + 1else:map1[str(value)] = 1return map1list = [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] + valueelse:sum_map[key] = valuemax_value = sorted(sum_map.values())[-1]log = sys.maxsizefor key,value in sum_map.items():if max_value == value:log = keybreakif log == sys.maxsize:print("錯誤")exit(1)count = 0for key,value in left_list_num.items():if value != log :list[int(key)] = list[int(key)] + (int(log) - int(value))count = count + 1list = list[::-1]num_log = 0if len(list) % 2 !=0:num_log = 1for key,value in right_list_num.items():if num_log == 1 and key == str(split_num-1):breakif value != log :list[int(key)] = list[int(key)] + (int(log) - int(value))count = count + 1print(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:passdef solution(self, n, arr):result = []# 保存右值max = 0# 保存左值min = 0next = 0for item in arr:if next>item and item>max:max=nextmin=itemelif next<min and item>max:min=nextnext=itemresult.append(str(min))result.append(str(max))if len(result)==0:result=["0","0"]return resultif __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:passdef 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 Falseif __name__ == "__main__":n = int(input().strip())sol = Solution()result = sol.solution(5)print(result)總結
以上是生活随笔為你收集整理的【站内题解】十六道csdn每日一练Python题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单方法适配IphoneXS Iphon
- 下一篇: 24_摘录的一些精彩语句1