Python實驗一

(四)、排列組合序列

【題目描述】
用戶輸入整數n(1<=n<=26)和整數m(m<=n),而後輸入n個不一樣的字母,請編寫程序輸出在這n個字母中選擇m個字母的全部排列序列和組合序列。
【源代碼程序】python

#!/usr/bin/env python
# _*_coding:utf-8 _*_
#@Time    :2019/4/23 0023 下午 2:12
#@Author  :喜歡二福的滄月君(necydcy@gmail.com)
#@FileName: Per_And_Com.py
#@Software: PyCharm
import iterto
(四)、排列組合序列
【題目描述】
用戶輸入整數n(1<=n<=26)和整數m(m<=n),而後輸入n個不一樣的字母,請編寫程序輸出在這n個字母中選擇m個字母的全部排列序列和組合序列。
"""
e=input()
num=int(input())
arr = input().split(" ")
print(arr)
a = list(itertools.combinations(arr,num))
b = list(itertools.permutations(arr,num))
print("Permutation:" )
for i in b:
  for j in i:
      print(j,end=" ")
  print()
print("Combination:" )
for i in a:
  for j in i:
      print(j,end=" ")
  print()

(五)、蒙特·卡羅法計算圓周率

【題目描述】
蒙特·卡羅方法是一種經過幾率來獲得問題近似解的方法,在不少領域都有重要的應用,其中就包括圓周率近似值的計問題。假設有一塊邊長爲2的正方形木板,上面畫一個單位圓,而後隨意往木板上扔飛鏢,落點座標(x,y)必然在木板上(更多的時候是落在單位圓內),若是扔的次數足夠多,那麼落在單位圓內的次數除以總次數再乘以4,這個數字會無限逼近圓周率的值。這就是蒙特·卡羅發明的用於計算圓周率近似值的方法。編寫程序,模擬蒙特·卡羅計算圓周率近似值的方法,輸入擲飛鏢次數,而後輸出圓周率近似值。
【源代碼程序】算法

#!/usr/bin/env python
# _*_coding:utf-8 _*_
#@Time    :2019/4/30 0030 下午 2:43
#@Author  :喜歡二福的滄月君(necydcy@gmail.com)
#@FileName: Monte_Carlo.py

#@Software: PyCharm
"""
(五)、蒙特·卡羅法計算圓周率
【題目描述】
蒙特·卡羅方法是一種經過幾率來獲得問題近似解的方法,在不少領域都有重要的應用,其中就包括圓周率近似值的計問題。假設有一塊邊長爲2的正方形木板,上面畫一個單位圓,而後隨意往木板上扔飛鏢,落點座標(x,y)必然在木板上(更多的時候是落在單位圓內),若是扔的次數足夠多,那麼落在單位圓內的次數除以總次數再乘以4,這個數字會無限逼近圓周率的值。這就是蒙特·卡羅發明的用於計算圓周率近似值的方法。編寫程序,模擬蒙特·卡羅計算圓周率近似值的方法,輸入擲飛鏢次數,而後輸出圓周率近似值。
"""
import random

num=int(input())
ok=0
for i in range(1,num+1):
    x=random.uniform(-1,1)#到-1到1的隨機數
    y=random.uniform(-1,1)
    if(x*x+y*y<=1):
        ok+=1
print(ok/num*4)

【運行測試】app

(六)、驗證6174猜測

【題目描述】
1955年,卡普耶卡(D.R.Kaprekar)對4位數字進行了研究,發現一個規律:對任意各位數字不相同的4位數,使用各位數字能組成的最大數減去能組成的最小數,對獲得的差重複這個操做,最終會獲得6174這個數字,而且這個操做最多不會超過7次。請編寫程序驗證這個猜測。
【源代碼程序】dom

#!/usr/bin/env python
# _*_coding:utf-8 _*_
#@Time    :2019/4/30 0030 下午 2:08
#@Author  :喜歡二福的滄月君(necydcy@gmail.com)
#@FileName: 6174.py

#@Software: PyCharm
"""
(六)、驗證6174猜測
【題目描述】
1955年,卡普耶卡(D.R.Kaprekar)對4位數字進行了研究,發現一個規律:對任意各位數字不相同的4位數,
使用各位數字能組成的最大數減去能組成的最小數,對獲得的差重複這個操做,最終會獲得6174這個數字,
而且這個操做最多不會超過7次。請編寫程序驗證這個猜測。
"""
def Min_Number(a):
    a=str(a)
    arr=[]
    for i in range(0,4):
     arr.append(a[i])
    arr.sort()
    return int(''.join(arr))
def Max_Number(a):
    a=str(a)
    arr = []
    for i in range(0, 4):
        arr.append(a[i])
    arr.sort(reverse=True)
    return int(''.join(arr))
a=input()
while (int(a)!=6174):
    a=Max_Number(a)-Min_Number(a)
    print(a,end=" ")

【運行測試】函數

(七)、模擬頁面調度LRU算法

【題目描述】
所謂LRU算法,是指在發生缺頁而且沒有空閒主存塊時,把最近最少使用的頁面換出主存塊,騰出地方來調入新頁面。
問題描述:一進程得到n個主存塊的使用權,對於給定的進程訪問頁面次序,問當採用LRU算法時,輸出發生的缺頁次數。
【源代碼程序】測試

#!/usr/bin/env python
# _*_coding:utf-8 _*_
#@Time    :2019/4/30 0030 下午 3:37
#@Author  :喜歡二福的滄月君(necydcy@gmail.com)
#@FileName: LRU.py

#@Software: PyCharm
"""
所謂LRU算法,是指在發生缺頁而且沒有空閒主存塊時,把最近最少使用的頁面換出主存塊,騰出地方來調入新頁面。
問題描述:一進程得到n個主存塊的使用權,對於給定的進程訪問頁面次序,問當採用LRU算法時,輸出發生的缺頁次數。

"""
def LRU(pages, maxNum,n):

    temp = []
    times = 0

    for page in lst:
        num = len(temp)
        if num < n:
            times += 1
            temp.append(page)
        elif num == n:                #要訪問的新頁面已在主存塊中
            if page in temp:          #處理「主存塊」,把最新訪問的頁面交換到列表尾部
                pos = temp.index(page)
                temp = temp[:pos] + temp[pos+1:] + [page]
            else:                     #把最先訪問的頁面踢掉,調入新頁面
                temp.pop(0)
                temp.append(page)
                times += 1

    return times
n=int(input())
lst=tuple(input().split(" "))
print(LRU(lst, 3,n))

【運行測試】ui

(八)、爬樓梯

【題目描述】
假設一段樓梯共n(n>1)個臺階,小朋友一步最多能上3個臺階,那麼小朋友上這段樓梯一共有多少種方法。
【源代碼程序】設計

#!/usr/bin/env python
# _*_coding:utf-8 _*_
#@Time    :2019/4/24 0024 下午 10:06
#@Author  :喜歡二福的滄月君(necydcy@gmail.com)
#@FileName: Climbing_ladder.py

#@Software: PyCharm

"""
(八)、爬樓梯
【題目描述】
 假設一段樓梯共n(n>1)個臺階,小朋友一步最多能上3個臺階,那麼小朋友上這段樓梯一共有多少種方法。
"""
def climb(num):
    if num==1:
        return 1
    if num==2:
       return 2
    if num==3:
        return 4
    else:
        sum=climb(num-1)+climb(num-2)+climb(num-3)
    return sum
print(climb(int(input())))

【運行測試】code

(九)、楊輝三角形

【題目描述】
輸出n(0<n)行楊輝三角形,n由用戶輸入。
【源代碼程序】orm

#!/usr/bin/env python
# _*_coding:utf-8 _*_
#@Time    :2019/4/24 0024 下午 9:36
#@Author  :喜歡二福的滄月君(necydcy@gmail.com)
#@FileName: YanghuiTriangle.py

#@Software: PyCharm

"""
(九)、楊輝三角形
【題目描述】
輸出n(0<n)行楊輝三角形,n由用戶輸入。

"""
def YangHui (num = 10):
    LL = [[1]]
    for i in range(1,num):
        LL.append([(0 if j== 0 else LL[i-1][j-1])+ (0 if j ==len(LL[i-1]) else LL[i-1][j]) for j in range(i+1)])
    return LL
a=int(input())
for i in YangHui(a):
    for j in i:
        print("%5d"%j,end="")
    print()

【運行測試】

(十)、篩法求素數

【題目描述】
用戶輸入整數n和m(1<n<m<1000),應用篩法求[n,m]範圍內的全部素數。
【源代碼程序】

#!/usr/bin/env python
# _*_coding:utf-8 _*_
# @Time    :2019/4/23 0023 下午 10:03
# @Author  :喜歡二福的滄月君(necydcy@gmail.com)
# @FileName: PremeNumble.py

# @Software: PyCharm
import numpy
"""
(十)、篩法求素數
【題目描述】
用戶輸入整數n和m(1<n<m<1000),應用篩法求[n,m]範圍內的全部素數。
"""
import math
num = [int(n) for n in input('').split()]
MAX_INT=num[1]
MIN_INT=num[0]
marks_bool = [True] * (MAX_INT + 1)
for i in range(2,int(math.sqrt(MAX_INT)) + 1):
    j = i
    k = j
    while j * k <= MAX_INT:
        marks_bool[j * k] = False
        k += 1
sum_int = 0
l=[]
for i in range(2,MAX_INT + 1):
    if marks_bool[i] is True:
        if(i>=MIN_INT):
            l.append(i)
print(numpy.array(l).reshape(-1,5))

【運行測試】

(十一)、查找鞍點

【題目描述】
對於給定5X5的整數矩陣,設計算法查找出全部的鞍點的信息(包括鞍點的值和行、列座標,座標從1開始)。
提示:鞍點的特色:列上最小,行上最大。
【源代碼程序】

#!/usr/bin/env python
# _*_coding:utf-8 _*_
#@Time    :2019/4/23 0023 下午 3:29
#@Author  :喜歡二福的滄月君(necydcy@gmail.com)
#@FileName: Saddle_Point.py

#@Software: PyCharm11 3 5 6 9 12 4 7 8 10 10 5 6 9 11 8 6 4 7 8 15 10 11 20 25
#
import numpy as np
num = [int(n) for n in input('').split()]
num = np.array(num,dtype=int)
num = num.reshape(5,5)
for i in range(0,5):
  for j in range(0,5):
     if (num[i][j] == min(num[:,j]) & num[i][j] == max(num[i,:])):
        print("[%s,%s,%s]"%(i+1,j+1,num[i][j]))

【運行測試】

(十二)、正整數的因子展開式

【題目描述】
編寫程序,輸出一個給定正整數x(x>1)的質因子展開式。
【源代碼程序】

#!/usr/bin/env python
# _*_coding:utf-8 _*_
#@Time    :2019/4/23 0023 下午 9:38
#@Author  :喜歡二福的滄月君(necydcy@gmail.com)
#@FileName: Proton.py

#@Software: PyCharm
a=int(input())
b=str(a)
num=[]
i=1
while i <= a:
    if a%i == 0:
        a = a/i
        num.append(i)
        print(num)
        i = 1
    i+=1
b+='='+str(num[1])
for j in num[2:]:
    b+="*"+str(j)
print(b)

【運行測試】

(十三)、牛頓迭代法(寫到實驗報告中)

【題目描述】
編寫程序,使用牛頓迭代法求方程 在x附近的一個實根。
【源代碼程序】

#!/usr/bin/env python
# _*_coding:utf-8 _*_
#@Time    :2019/4/23 0023 下午 2:12
#@Author  :喜歡二福的滄月君(necydcy@gmail.com)
#@FileName: Per_And_Com.py

#@Software: PyCharm
from math import fabs

def solut(a,b,c,d,e):
    x1=e
    # 迭代:
    while True:
        x=x1
        f = ((a * x + b) * x + c) * x + d #原函數
        f1 = (3 * a * x + 2 * b) * x + c #求導的函數
        x1 = x - f / f1
        if (fabs(x1 - x) <= 0.00000001):
            return x1
num = [float(n) for n in input('').split()]
print(("%0.2f")%(solut(num[0],num[1],num[2],num[3],num[4])))

【運行測試】

相關文章
相關標籤/搜索