題目21:兩個乒乓球隊進行比賽,各出3人。甲隊爲a,b,c三人,乙隊爲x,y,z三人。以抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x、z比,請編程找出三隊比賽名單。python
first_list=['x','y','z'] for i in first_list: #i是a的對手,j是b的對手,k是c的對手 for j in first_list: if(j!=i): for k in first_list: if(k!=i)and(k!=j): if(i!='x')and(k!='x')and(k!='z'): print('a pk %s,b pk %s,c pk %s' %(i,j,k)) 輸出結果: a pk z,b pk x,c pk y
題目22:有一分數序列:2/1,3/2,5/3,8/5,8/13,21/13...求出這個序列的前20項之和。算法
def denominator(n): #定義分母 if n==1: return 1 elif n==2: return 2 else: return denominator(n-1)+denominator(n-2) sum_list=0 for i in range(1,21): sum_list +=denominator(i+1)/denominator(i) if i==20: print('%d/%d' %(denominator(i+1),denominator(i)),end='=') else: print('%d/%d' %(denominator(i+1),denominator(i)),end='+') print(sum_list) 輸出結果: 2/1+3/2+5/3+8/5+13/8+21/13+34/21+55/34+89/55+144/89+233/144+377/233+610/377+987/610+1597/987+2584/1597+4181/2584+6765/4181+10946/6765+17711/10946=32.66026079864164
題目23:利用遞歸函數調用方法,將所輸入的5個字符,以相反順序打印出來。編程
def reverse_string(i): if i==string_len-1: #讀取到最後一個字符 print(input_string[i],end='') else: reverse_string(i+1) #反向輸出 print(input_string[i],end='') input_string=input('請輸入字符串:') string_len=len(input_string) reverse_string(0) 輸出結果: 請輸入字符串:abcdefghijk kjihgfedcba
題目24:有5我的坐在一塊兒,問第五我的多少歲?她說比第四我的大2歲。問第四我的歲數,他說比第三我的大2歲。問第三我的,他又說比第二我的大2歲。問第二我的,說比第一我的大2歲。問最後一我的,她說是10歲。問第五我的多少歲。數組
def get_age(num): #遞歸計算 if num==1: return 10 else: return 2+get_age(num-1) var_gae=get_age(5) print('第一我的的年齡爲:%d' %var_gae) 輸出結果: 第一我的的年齡爲:18
題目25:給一個很少於5位的正整數,要求:1、求它是幾位數,2、逆序打印出各位數字。app
def rever_num(num): #遞歸輸出 if num==num_len-1: print(input_number[num],end='') else: rever_num(num+1) print(input_number[num],end='') input_number=input('請輸出數字:') num_len=len(input_number) print('該數字有%d 位' %num_len) rever_num(0) 輸出結果: 請輸出數字:54682 該數字有5 位 28645
題目26:《算經》中有這樣一個問題:今有雞翁一,值錢伍;雞母一,值錢三;雞鶵三,值錢一。凡百錢買雞百隻,問雞翁、母、鶵各幾何?dom
for i in range(21): #i表明公雞 for j in range(34):#j表明母雞 k=100-i-j #k表明小雞數量 if(k%3==0)and (i*5 + j*3 + k/3)==100: print('公雞%2d只,母雞%2d只,小雞%2d只' %(i,j,k)) 輸出結果: 公雞 0只,母雞25只,小雞75只 公雞 4只,母雞18只,小雞78只 公雞 8只,母雞11只,小×××1只 公雞12只,母雞 4只,小×××4只
題目27:漢諾塔問題,寺院裏有3根柱子,第一根有N個盤子,從上往下愈來愈大。方丈要求小和尚A1把這N個盤子所有移到第三根柱子上,在移動過程當中,始終只能小盤子壓着大盤子,並且每一次只能移動一個盤子。ide
def move(n,x,y,z): if n==1: print('%s--->%s' %(x,z)) #當只有最後一個盤子時,a--->c else: move(n-1,x,z,y) print('%s--->%s' %(x,z)) move(n-1,y,x,z) num=int(input('輸入盤子的數量:')) print('移動%d個盤子的步驟以下:' %num) move(num,'a','b','c') 輸出結果: 輸入盤子的數量:3 移動3個盤子的步驟以下: a--->c a--->b c--->b a--->c b--->a b--->c a--->c
題目28:一年一度的歐洲盃比賽已經落幕,在其初賽階段採用循環制,設有n隊參加,初賽共進行n-1天,每對要求和其餘各隊進行一場比賽,而後按照最後積分選拔進入決賽的球隊。要求每對天天只進行一場比賽,而且不能輪空。請安排比賽賽程。
函數
a=[[0 for col in range(9)] for row in range(9)] #建立二維列表 def gamecal(k,n): #處理編號k開始的n個球隊 if n==2: a[k][1]=k #參賽球隊編號 a[k][2]=k+1 #對陣球隊編號 a[k+1][1]=k+1 #參賽球隊編號 a[k+1][2]=k #對陣球隊編號 else: gamecal(k,n//2) gamecal(k+n//2,n//2) for i in range(k,k+n//2): for j in range(n//2+1,n+1): a[i][j]=a[i+n//2][j-n//2] for i in range(k+n//2,k+n): for j in range(n//2+1,n+1): a[i][j]=a[i-n//2][j-n//2] j=2 m=int(input('參賽球隊數:')) for i in range(2,9): j=j*2 if j==m : break if i>=8: print('參賽對數必須爲2的整數次冪,而且不超過64') gamecal(1,m) print('編號',end=' ') for i in range(2,m+1): if i==m: print('%2d天' %(i-1)) else: print('%2d天' %(i-1),end=' ') for i in range(1,m+1): for j in range(1,m+1): if j==m: print('%4d' %a[i][j],end=' ') else: print('%4d' %a[i][j],end=' ') print(end='\n') 參賽球隊數:8 編號 1天 2天 3天 4天 5天 6天 7天 1 2 3 4 5 6 7 8 2 1 4 3 6 5 8 7 3 4 1 2 7 8 5 6 4 3 2 1 8 7 6 5 5 6 7 8 1 2 3 4 6 5 8 7 2 1 4 3 7 8 5 6 3 4 1 2 8 7 6 5 4 3 2 1
題目29:編寫程序,實現輸入任意金額,能夠由100、50、20、十、五、一、0.五、0.二、0.1這幾種面額組成。如找零68.9,能夠由一張20塊、四張10塊、一張5塊、三張1塊、一張0.五、四張0.1組成。ui
parvalue=[10000,5000,2000,1000,500,100,50,10] #找零的金額*100,方便計算 max_num=len(parvalue) num=[0,0,0,0,0,0,0,0] def exchange(n): for i in range(max_num): if(n>=parvalue[i]): num[i] =n//parvalue[i] n -=parvalue[i] * num[i] input_number=float(input('請輸入要找零金額:')) input_number=int(input_number*100) exchange(input_number) print('%-6.2f元零錢的組成:' %(input_number/100)) for i in range(max_num): if num[i]>0: print('%6.2f:%d張' %(parvalue[i]/100,num[i])) 請輸入要找零金額:85.9 85.90 元零錢的組成: 50.00:1張 20.00:1張 10.00:1張 5.00:1張 0.50:1張 0.10:4張
題目30:八皇后問題,在8*8的國際象棋上擺放八個皇后,使其不能相互***,即任意兩個皇后都不能處於同一行、同一列或同一對角線上。
spa
solution=[x for x in range(8)] #聲稱數組,每一個元素表明每一行皇后應擺放的位置 N=8 sols=0 def place(row,col): for j in range(row): #錯誤擺放方式 if (row - j == solution[row]-solution[j]) or (row + solution[row]==j+solution[j]) or (solution[j]==solution[row]): return 0 return 1 def backtrack(row): global sols #方法總數 if(N==row): sols +=1 for k in range(N): if k==N-1: print('%d ' %solution[k]) else: print('%d ' %solution[k],end='') else: for i in range(N): solution[row] =i if(place(row,i)): backtrack(row+1) def queens(): backtrack(0) queens() print('共有方案:%d' %sols) 輸出結果: ... 6 4 2 0 5 7 1 3 7 1 3 0 6 4 2 5 7 1 4 2 0 6 3 5 7 2 0 5 1 4 6 3 7 3 0 2 5 1 6 4 共有方案:92
題目31:假設有一種29選7的×××,每注由7個1-29的數字組成,且這7個號碼不能相同,編寫程序生成全部的組合。
MAXN=7 #每注×××的位數 NUM= 29 #組成×××的數字 num=[x for x in range(NUM)] #29個數字 lottery=[x for x in range(MAXN)] #每一注×××的號碼 def combine(n,m): for i in range(m,n+1).__reversed__(): lottery[m-1]=num[i-1] #保存一位數字 if(m>1): combine(i-1,m-1) else: #m爲1時輸出一注號碼 for j in range(0,MAXN).__reversed__(): if j==0: print('%d ' %lottery[j]) else: print('%d ' %lottery[j],end='') for i in range(NUM): num[i]=i+1 for i in range(MAXN): lottery[i]=0 combine(NUM, MAXN) 輸出結果: ... 29 27 24 20 16 13 3 29 27 24 20 16 13 2 29 27 24 20 16 13 1 29 27 24 20 16 12 11 29 27 24 20 16 12 10 29 27 24 20 16 12 9 29 27 24 20 16 12 8 29 27 24 20 16 12 7 ...
題目32:輸入一個數字,使用變成方式求出其平方根是多少。
import math num=int(input('請輸入數字:')) if num <0: print('輸入的數字應該爲正數') else: x0=num/2 x1=(x0+num/x0)/2 while True: x0=x1 x1=(x0+num/x0)/2 if(math.fabs(x0-x1)>=1e-6): break print('計算結果:%f' %x1) print('公式計算結果 %f' %math.sqrt(num)) 輸出結果: 請輸入數字:2 計算結果:1.416667 公式計算結果 1.414214
題目33:用計算機實現一個隨機1-100之間的數字,而後由用戶猜這個數字,根據用戶猜想的次數分別給出不一樣的提示。
from random import randint n=randint(1,100) print('生成隨機數爲%d' %n) i=0 while True: num=int(input('輸入你猜的數字1-100:')) i+=1 if(num>n): print('錯誤,數字太大了!') elif(num<n): print('錯誤,數字過小了!') else : print('回答正確') break print('一共猜了 %d 次。' %i) if i<=5: print('你太聰明瞭,這麼快猜了出來!') else: print('還須要改進方法,以便更快纔出來!') 輸出結果: 生成隨機數爲47 輸入你猜的數字1-100:50 錯誤,數字太大了! 輸入你猜的數字1-100:46 錯誤,數字過小了! 輸入你猜的數字1-100:47 回答正確 一共猜了 3 次。 你太聰明瞭,這麼快猜了出來!
題目34:模擬算法解決'擲骰子游戲',根據用戶輸入的骰子數量和參賽人數,由計算機隨機生成每一粒骰子的點數,再累加到每個算首的總數。
from random import randint def play(n): t=0 m=0 for i in range(n): t=randint(1,6) m+=t print(' 第%d粒:%d' %((i+1),t)) print(' 總點數爲:%d' %m) while True: n=int(input('設置骰子數量(輸入0表示退出:)')) #骰子數量 if n==0: break c=int(input('輸入參賽人數(輸入0表示退出:)')) #參賽人數 if c==0: break for i in range(c): print('第%d位選手擲出的骰子爲:' %(i+1)) play(n) 設置骰子數量(輸入0表示退出:)3 輸入參賽人數(輸入0表示退出:)4 第1位選手擲出的骰子爲: 第1粒:3 第2粒:6 第3粒:2 總點數爲:11 第2位選手擲出的骰子爲: 第1粒:5 第2粒:6 第3粒:5 總點數爲:16 第3位選手擲出的骰子爲: 第1粒:3 第2粒:4 第3粒:3 總點數爲:10 第4位選手擲出的骰子爲: 第1粒:6 第2粒:4 第3粒:2 總點數爲:12 設置骰子數量(輸入0表示退出:)
題目35:生成一個4*4的2維數組並將其順時針旋轉90度
list_data=[[ row for row in range(4)] for col in range(4)] for i in range(4): print(list_data[i]) print('-------------------------') for r_index,row in enumerate(list_data): for c_index in range(len(row)): if r_index < c_index : temp=list_data[r_index][c_index] list_data[r_index][c_index]=list_data[c_index][r_index] list_data[c_index][r_index]=temp for i in range(4): print(list_data[i]) 輸出結果: [0, 1, 2, 3] [0, 1, 2, 3] [0, 1, 2, 3] [0, 1, 2, 3] ------------------------- [0, 0, 0, 0] [1, 1, 1, 1] [2, 2, 2, 2] [3, 3, 3, 3]
題目36:打印出楊輝三角形。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
num=int(input('輸入要生成的楊輝三角行數:')) triangle=[[ row for row in range(num)] for col in range(num)] for i in range(num): triangle[i][0]=1 triangle[i][i]=1 for i in range(2,num): for j in range(1,i): triangle[i][j]=triangle[i-1][j-1]+triangle[i-1][j] for i in range(num): for j in range(i+1): if j==i: print(triangle[i][j]) else: print(triangle[i][j],end=' ') 輸出結果: 輸入要生成的楊輝三角行數:10 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1
題目37:有n個整數,使其前面各數順序向後移m個位置,最後m個數變成最前面的m個數。
def move_list(n): print('原列表:',list_a) b=list_a[num-n:] print('須要移動的數:',b) for i in range(num-n): b.append(list_a[i]) print('移動後的列表:',b) num=int(input('輸入要生成的列表長度:')) list_a=[x for x in range(num)] move_m=int(input('要移動的長度:')) move_list(move_m) 輸出結果: 輸入要生成的列表長度:15 要移動的長度:4 原列表:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] 須要移動的數:[11, 12, 13, 14] 移動後的列表: [11, 12, 13, 14, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
題目38:有n我的圍成一圈,順序排號。從第一我的開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來第幾號的那位。
num=int(input('請問一共有多少人:')) list_num=[x for x in range(1,num+1)] print(list_num) quit_num=0 #出圈人數 k=0 #計數3 i=0 #計數數組 while(quit_num<len(list_num)-1): if(list_num[i]!=0): k+=1 if(k==3): #數到三出局 print('出局者:%d' %list_num[i]) list_num[i]=0 quit_num+=1 k=0 i+=1 if(i==len(list_num)): #數到最後,從新數 i=0 for i in range(len(list_num)): if(list_num[i]!=0): print("最後剩下的:%d" %list_num[i]) 請問一共有多少人:15 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 出局者:3 出局者:6 出局者:9 出局者:12 出局者:15 出局者:4 出局者:8 出局者:13 出局者:2 出局者:10 出局者:1 出局者:11 出局者:7 出局者:14 最後剩下的:5
題目39:咱們來玩一個數字遊戲,我已經想好了一個三位數abc(a是百位,b是十位,c是個位)。而且告訴你acb、bac、bca、cab、cba的和是2012。你知道我所想的那個數是多少嗎?
for i in range(100,1000): a=i//100 b=(i%100)//10 c=i%10 sum_num=(a+b+b+c+c)*100+(c+a+c+a+b)*10+b+c+a+b+a if sum_num==2012: print(i) 輸出結果: 208
題目40:神奇的125874,125874,125874*2=251748,125874和他的兩倍251748是由相同的數構成,位置不一樣而已; 求最小的x,使得x,2x,3x,4x,5x,6x的倍數所組成的數和自己同樣。
set_num=set() #原數字組成的集合 set_numx=set() #倍乘後組成的集合 n=1 #起始數字 def jud_num(num): for i in str(num): set_num.add(i) #原數字組成的集合 for i in range(1,7): num_i=num*i for j in str(num_i): set_numx.add(j) #倍乘後組成的集合 if set_numx.issubset(set_num): set_numx.clear() else: set_numx.clear() set_num.clear() return 0 return 1 while True: ret=jud_num(n) if ret==1: print('該數字爲:%d' %n) for i in range(1,7): print('%d*%d=%d' %(n,i,n*i)) break n+=1 輸出結果: 該數字爲:142857 142857*1=142857 142857*2=285714 142857*3=428571 142857*4=571428 142857*5=714285 142857*6=857142