1.題目名稱:批閱奏章某朝皇帝有大臣n名(1<=n<=1000),分別編號大臣1~n。某日皇帝身體抱恙,奏章堆積如山無法及時一一批閱,便命身旁內侍幫他把奏章按指定順序排序後再閱。於是皇帝親自挑選了幾個值得信賴的重臣併排好序,要求把他們的奏章按排好的順序放到前面,其他的按照編號升序排列即可。現在要求你 ...
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 = 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))