1.題目名稱:批閱奏章
某朝皇帝有大臣n名(1<=n<=1000),分別編號大臣1~n,某榷訓帝身體抱恙,奏章堆積如山無法及時一一批閱,便命身旁內侍幫他把奏章按指定順序排序后再閱,于是皇帝親自挑選了幾個值得信賴的重臣并排好序,要求把他們的奏章按排好的順序放到前面,其他的按照編號升序排列即可,現在要求你寫一個程式來幫皇上解決這個問題,即已知奏章總數和順序、欽點重臣的排列順序,求得皇帝查閱奏章的順序,
輸入描述:
第一行輸入兩個整數p(1<=p<=5000)和q,其中p表示堆積奏章的總數、q表示皇帝欽點重臣數
第二行輸入p個數,表示所有按呈遞順序遞上來的奏章來自于哪個大臣(大臣編號)
第三行輸入q個數,表示皇帝欽點并排好序的重臣編號
輸出描述:
輸出奏章按指定順序排好序后,皇帝按大臣編號批閱的順序
輸入樣例:
5 3
5 4 3 2 1
3 5 4
輸出樣例:
3 5 4 1 2
答案:
line1 = list(map(int,input('ddd').split())) p = line1[0] q = line1[1] article_author = list(map(int,input('ddd').split())) persons = list(map(int,input('ddd').split())) result =[] article_author.sort() for p1 in persons: for a1 in range(0,len(article_author)): if article_author[a1] == p1: result.append(p1) article_author[a1] = 0 for a1 in article_author: if a1!=0: result.append(a1) print_text = list(map(str,result)) print(" ".join(print_text))
2.題目名稱:報價
時間限制:1000ms記憶體限制:256M
題目描述
給定某股票每日的報價和一個目標值,請在所有報價中找出和為目標值的那兩天的報價,并列印出對應的報價,
假設每種輸入只會對應一個答案,且每日的報價不會重復,
你需要按報價從小到大的順序列印答案,
輸入描述:
輸入:第一行是某股票每日的報價,這些報價是正整數且用空格相隔,例如:17 20 33
第二行是目標值,例如:37
輸出描述:
輸出:對應的報價,報價之間用空格相隔,例如:17 20
示例
示例1
輸入
17 20 33
37
復制
輸出
17 20
復制
答案:
list1=list(map(int,input().split())) goal=int(input()) list1.sort() for i in list1: if (goal-i) in list1: print(str(i)+" "+str(goal-i)) break
3.題目名稱:水仙花數
時間限制:1000ms記憶體限制:256M
題目描述
如果一個 3 位數等于其各位數字的立方和,則稱這個數為水仙花數,
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個水仙花數
輸入描述:
輸入一個整數a與一個整數b, 用空格分隔
輸出描述:
輸出a到b區間內的水仙花數
示例
示例1
輸入
100 170
復制
輸出
153
復制
答案:
a,b = map(int,input().split()) for n in range(a,b+1): x = int(str(n)[0]) y = int(str(n)[1]) z = int(str(n)[2]) if n == x**3 + y**3 + z**3: print(n)
4.題目名稱:字串查找和比較(pass)
時間限制:1000ms記憶體限制:256M
題目描述
寫函式實作如下功能,給定字串A和B,輸出A和B中的最長公共子串,比如A=“aocdfe” B=“pmcdfa” 則輸出"cdf",
輸入描述:
輸入待處理的兩個字串 str1,str2
輸出描述:
找出兩個字串最長的公共子串
示例 示例1
輸入
aocdfe
pmcdfa
輸出
Cdf
答案:
A = str(input("")) B = str(input("")) if len(A)>len(B): A,B = B,A out_put=[] for i in range(len(A),0,-1): for j in range(0,len(A)-i+1): if A[j:j+i] in B: print(A[j:j+i]) out_put.append(A[j:j+i]) if out_put: break
5.題目名稱:尼姆博弈
時間限制:1000ms記憶體限制:256M
題目描述
你和你的朋友,兩個人一起玩 Nim 游戲:
桌子上有一堆石頭,
你們輪流進行自己的回合,你作為先手,
每一回合,輪到的人拿掉 1 - 3 塊石頭,
拿掉最后一塊石頭的人就是獲勝者,
假設你們每一步都是最優解,請撰寫一個函式,來判斷你是否可以在給定石頭數量為 n 的情況下贏得游戲,如果可以贏,回傳 true;否則,回傳 false ,
輸入描述:
整數n
輸出描述:
true或false
示例
示例1
輸入
4
復制
輸出
False
答案:
num = int(input()) if num % 4 == 0: print("false") else: print("true")
6.題目名稱:羅馬數字轉整數(pass)
時間限制:1000ms記憶體限制:256M
題目描述
羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M,
例如, 羅馬數字 2 寫做 II ,即為兩個并列的 1 ,12 寫做 XII ,即為 X + II , 27 寫做 XXVII, 即為 XX + V + II ,
通常情況下,羅馬數字中小的數字在大的數字的右邊,但也存在特例,例如 4 不寫做 IIII,而是 IV,數字 1 在數字 5 的左邊,所表示的數等于大數 5 減小數 1 得到的數值 4 ,同樣地,數字 9 表示為 IX,這個特殊的規則只適用于以下六種情況:
I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9,
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90,
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900,
給定一個羅馬數字,將其轉換成整數,
輸入描述:
羅馬數字
輸出描述:
轉換后的整數
示例
示例1
輸入 III
輸出 3
答案:
src =https://www.cnblogs.com/liuyebai/p/ input() n_value = {"Z":0,"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000} pre_value = {"I":"Z","V":"I","X":"I","L":"X","C":"X","D":"C","M":"C"} result = 0 last_char = "" for _c in src: result+= n_value[_c] if last_char == pre_value[_c]: result-= n_value[last_char] * 2 last_char = _c print(result)
7.題目名稱:員工排序
時間限制:1000ms記憶體限制:256M
題目描述
某公司要針對員工情況統一調薪,現有一個員工串列,包含姓名、職級、作業年限、工資資訊,現要求將該串列按以下規則重新排序:
1、職級高的排在前面
2、若職級相同,按工資少的排前面
3、若工資相同,作業年限長的排前面
輸入描述:
第一行輸入一個整數n,表示員工串列中員工的人數
接下來的n行,分別輸入員工的姓名、職級、作業年限和工資資訊,各項資訊用空格分隔
輸出描述:
輸出按要求重新排列的員工串列,每名員工資訊(姓名、職級、作業年限和工資)占一行
示例
示例1
輸入
6
張三 3 3 3000
李四 3 4 3000
王五 3 3 4000
趙六 4 3 3000
陸奇 4 4 4000
閆八 4 4 3980.99
復制
輸出
趙六 4 3 3000.00
閆八 4 4 3980.99
陸奇 4 4 4000.00
李四 3 4 3000.00
張三 3 3 3000.00
王五 3 3 4000.00
答案:
num = int(input()) employees = [] for _i in range(0,num): employees.append(input().split()) src_data = list(map(lambda x:[x[0],int(x[1]),int(x[2]),float(x[3])],employees)) src_data.sort(key=lambda x: -1000000000000*x[1] + 10000*x[3] - x[2]) for _i in src_data: print("%s %d %d %0.2f" % (_i[0],_i[1],_i[2],_i[3]))
8.題目名稱:漢諾塔
時間限制:1000ms記憶體限制:256M
題目描述
有三個立柱A、B、C,A柱上穿有大小不等的圓盤N個,較大的圓盤在下,較小的圓盤在上,要求把A柱上的圓盤全部移到C柱上,保持大盤在下、小盤在上的規律(可借助B柱),每次移動只能把一個柱子最上面的圓盤移到另一個柱子的最上面,請輸出移動程序,
輸入描述:
輸入一個整數n
輸出描述:
輸出移動程序
示例
示例1
輸入
3
復制
輸出
a->c
a->b
c->b
a->c
b->a
b->c
a->c
復制
def han_nuo(n,src,tmp,dest): if n <= 0: return if n == 1: print(src + "->" + dest) return han_nuo(n-1,src,dest,tmp) print(src + "->" + dest) han_nuo(n-1,tmp,src,dest) num = int(input()) han_nuo(num,"a","b","c")
9.題目名稱:交換數值
時間限制:1000ms記憶體限制:256M
題目描述
將整數a、b的值進行交換,并且不使用任何中間變數,
輸入描述:
輸入待處理的兩個整數 a 和b
輸出描述:
a 和b 的值交換
示例
示例1
輸入
a=100
b=200
復制
輸出
a=200
b=100
復制
答案
a = int(input().split('=')[1]) b = int(input().split('=')[1]) a,b = b,a print("a=%d"%a) print("b=%d"%b)
10.題目名稱:行程排序(pass)
某系統中有n個行程,每個行程都有自己唯一的行程id(PID),同時每個行程最多還有一個父行程,父行程id為(PPID),和一個或多個子行程,
若某行程沒有父行程,則PPID為0, 當某一行程被終止時,其子行程也將被終止,
現給出行程id串列和起對應的父行程id串列,當要終止某一行程時,計算最侄訓終止哪些行程,并將要終止的PID按升序排列,
輸入描述:
第一行輸入兩個整數n和k,n表示當前系統中運行的行程數;k表示要終止行程的PID
第二行輸入n個正整數,表示行程串列,每個整數表示行程的PID
第三行輸入n個正整數,表示行程串列中的行程對應的父行程PPID串列,
輸出描述:
輸出當行程k終止時,所有會被終止的行程PID,并按PID升序排列,每個PID用空格分隔,
輸入樣例:
4 5
1 3 10 5
3 0 5 3
輸出樣例:5 10
答案:
import copy n,k=map(int,input().split(' ')) pids=list(map(int,input().split(' '))) ppids=list(map(int,input().split(' '))) t=[k] A=[k] while len(set(t)&set(ppids))>0: zk=[] for x in t: for i in range(len(ppids)): if ppids[i]==x: zk.append(pids[i]) A.append(pids[i]) t=copy.deepcopy(zk) A.sort() li=[str(x) for x in A] print(' '.join(li))
11.題目名稱:丑數
時間限制:1000ms記憶體限制:256M
題目描述
給你一個整數 n ,請你判斷 n 是否為 丑數 ,如果是,回傳 true ;否則,回傳 false ,
丑數 就是只包含質因數 2、3 和/或 5 的正整數,(1通常被視為丑數)
輸入描述:
整數n
輸出描述:true或false
示例 示例1
輸入6
輸出true
答案:
m=int(input()) def cnum(n): while True: if n <= 0: return False elif n==1 or n==2 or n==3 or n==5: return True elif n % 2 ==0: n = n/2 elif n % 3 ==0: n = n/3 elif n % 5 ==0: n = n/5 else: return False f=cnum(m) if f == True: print("true") else: print("false")
12、 克拉茲猜想:任取一正整數,如果是偶數,將其除以2,如果是奇數,將其乘以3再加1,然后重復這個程序,最后結果都會陷入4 2 1 的回圈,
比如序列:13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1
請通過編程實作,當4,2,1重復第二次的時候,結束回圈,請輸出以下3個序列:
[13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1]
[31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1]
[101, 304, 152, 76, 38, 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1]
def collatz(number): res=number%2 if res==0: return number//2 else: return number*3+1 num=13 in_list=[13,31,101] for num in in_list: jg_list = [num] while True: num=collatz(num) jg_list.append(num) if jg_list.count(1)==2: break print(jg_list) ----------------------------------------------------------
如果輸入的數 是 1 2 就不適用上面的程式 必須改用下面
num= int(input()) arr = input() in_list = [int(n) for n in arr.split()] def collatz(number): res=number%2 if res==0: return number//2 else: return number*3+1 for num in in_list: jg_list = [num] while True: num=collatz(num) jg_list.append(num) if jg_list[-6:]==[4,2,1,4,2,1]: break print(jg_list)
13、給定一組數,按照陣列中出現的次數依次從大到小排序,出現次數一樣的按照陣列中的先后順序輸出
比如:
輸入:1 1 1 1 3 3 3 4 5 2 6 6 6 6 6
輸出:6 6 6 6 6 1 1 1 1 3 3 3 4 5 2?
n=map(int,input().split()) n=list(n) jg_list=[] for index,value in enumerate(n): j=n.count(value) jg=[value,index,j] jg_list.append(jg) jg_list.sort(key=lambda x:x[1]) jg_list.sort(key=lambda x:x[2],reverse=True) for x in jg_list: print(x[0],'',end='')
14、完數:一個數如果恰好等于它的因子之和,這個數就稱為"完數",例如6=1+2+3,編程找出10000以內的所有完數,
jg=[] for i in range(1,10000): sum1 = 0 for j in range(1,int(i/2)+1): if i/j==int(i/j): sum1+=j if sum1==i: jg.append(i) print(jg)
15、利用條件運算子的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示
def main(): s = int(input('請輸入成績:')) if s>=90: grade = 'A' elif s>=60: grade = 'B' else: grade = 'C' print(grade) main()
16、遞回案例 求斐波那契列數列1,1,2,3,5,8,13 的第30位
def f(n): return 1 if n==1 or n==2 else f(n-1)+f(n-2) n=int(input()) ls=[] for i in range(1,n+1): if i==1 or i==2: ls.append(1) else: ls.append(ls[i-2]+ls[i-3]) print(ls)
求整數N的階乘
n=int(input()) def f(n): if n==1: return(n) else: return(n*f(n-1)) print(f(1),f(2),f(3),f(4),f(5),f(6)) print(f(n))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/518475.html
標籤:Python
上一篇:不怕新歌有多嗨,就怕老歌帶DJ,用Python批量下載dj歌曲!
下一篇:用python創建檔案夾
