index
python示例
1. 實例001:數字組合
題目: 有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少?
2. 實例002:“個稅計算”
題目 企業發放的獎金根據利潤提成。利潤(I)低于或等于10萬元時,獎金可提10%;利潤高于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可提成7.5%;20萬到40萬之間時,高于20萬元的部分,可提成5%;40萬到60萬之間時高于40萬元的部分,可提成3%;60萬到100萬之間時,高于60萬元的部分,可提成1.5%,高于100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
3. 實例003:完全平方數,
題目:一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
假設該數為x,則:
x + 100 = n 2 (1) x + 100 = n^2 \tag1 x+100=n2(1)
x + 100 + 168 = m 2 (2) x + 100 + 168 = m^2 \tag2 x+100+168=m2(2)
計算等式: m 2 − n 2 = ( m + n ) ( m − n ) = 168 (3) m ^2 - n ^2 = (m+n)(m-n) = 168 \tag3 m2−n2=(m+n)(m−n)=168(3)
設: i = m + n , j = m − n (4) i = m + n ,\qquad j = m - n \tag4 i=m+n,j=m−n(4)
那么, i ∗ j = 168 i * j = 168 i∗j=168, i和j至少一個是偶數
由(4)得到:
m = i + j 2 (5) m = \dfrac{i+j}{2}\tag5 m=2i+j(5)
n = i − j 2 (6) n = \dfrac{i-j}{2}\tag6 n=2i−j(6)
由(5)和(6)可知,i和j要么都是偶數,要么都是奇數
由此可推導出,i與j均是大于等于2的偶數。
由于 i ∗ j = 168 , j > = 2 則 1 < i < 168 2 + 1 i * j = 168,\quad j>=2 \quad 則 1 < i < \dfrac{168}{2} +1 i∗j=168,j>=2則1<i<2168+1
那么就可以對所有數字循環計算。
代碼:
1 2 3 4 5 6 7 8 9 | # -*- coding: UTF-8 -*- for i in range ( 1 , 85 ): if 168 % i = = 0 : j = 168 / i if i>j and (i - j) % 2 = = 0 and (i + j) % 2 = = 0 : m = (i + j) / 2 n = (i - j) / 2 x = n * n - 100 print (x) |
4. 實例004:這天第幾天,
題目 輸入某年某月某日,判斷這一天是這一年的第幾天?
5. 三數排序,
冒泡排序:
1. 要找出n-1個數(從大到小一次查找)
2. 假如:第1個大數(最大),從頭開始,依次與后面的一個數比較,一直到第n-1位置的數與第n位置的數比較。最大的數就放在第n的位置。比較n-1
3. 如果,已經找出了m的大數,下一次的比較,就是在找出m個大數的基礎上進行比較,就是要在n-m個數中比較,比較的次數是n-m-1
代碼:
1 2 3 4 5 6 7 | arr = [ 9 , 4 , 7 , 3 , 1 , 8 ] n = len (arr) for i in range ( 0 ,n - 1 ): # range(1,n) = {1,2,...,n-1},range(0,n-1) = {0,1,...,n-2} for j in range ( 0 ,n - i - 1 ): if arr[j] > arr[j + 1 ]: arr[j],arr[j + 1 ] = arr[j + 1 ],arr[j] print ( '找到第' ,i + 1 , "個大數時,排列順序為:" ,arr) |
- 斐波那契數列,
題目 :輸出斐波那契數列第n項的值。
程序分析: 斐波那契數列(Fibonacci sequence),從1,1開始,后面每一項等于前面兩項之和。
重點:可以用遞歸實現,也可以用循環實現。
a 1 = 1 , a 2 = 1 , a 3 = a 1 + a 2 , . . . , a n = a n − 2 + a n − 1 a_1 = 1, a_2 =1, a_3 = a_1 + a_2,..., a_n = a_{n-2}+a_{n-1} a1=1,a2=1,a3=a1+a2,...,an=an−2+an−1
方法1:
1 2 3 4 5 6 7 8 9 | n = int ( input ( 'please input a number of squence: ' )) a = 1 b = 1 if n > 2 : for i in range ( 3 ,n + 1 ): cur = a + b a = b b = cur print (cur) |
方法2:
1 2 3 4 5 6 7 | n = int ( input ( 'please input a number of squence: ' )) a = 1 b = 1 if n > 2 : for i in range ( 3 ,n + 1 ): a,b = b,a + b print (b) |
6. 實例011:養兔子
題目: 有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
1 2 3 4 | * * 程序分析 * * : [點擊這里查看](https: / / gitee.com / acktomas / teach / blob / master / python / 07_ % E5 % 85 % BB % E5 % 85 % 94 % E5 % AD % 90.ipynb ) * * 代碼 * * : * * 遞歸算法 * * |
1 2 3 4 5 6 7 8 9 | def rabbits(n): if n < 3 and n > 0 : return 1 else : return rabbits(n - 1 ) + rabbits(n - 2 ) month = int ( input ( '當前月份:' )) for i in range ( 1 , month + 1 ): num = rabbits(i) print ( '第%d月,兔子數量為%d對。' % (i, num)) |
循環的另一種解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | month = int ( input ( '繁殖幾個月?: ' )) month_1 = 1 #兔齡為1個月的兔子數量 month_2 = 0 #兔齡為2個月的兔子數量 month_3 = 0 #兔齡為3個月的兔子數量 month_elder = 0 #成年 for i in range (month): month_elder = month_elder + month_3 month_3 = month_2 month_2 = month_1 month_1 = month_elder + month_3 # # month_1, month_2, month_3, month_elder = month_elder+month_3, month_1, month_2, month_elder+month_3 print ( '第%d個月共' % (i + 1 ),month_1 + month_2 + month_3 + month_elder, '對兔子' ) print ( '其中1月兔:' ,month_1) print ( '其中2月兔:' ,month_2) print ( '其中3月兔:' ,month_3) print ( '其中成年兔:' ,month_elder) |