Python作业1
Python0002】排列组合序列
【题目描述】
用户输入整数n(1<=n<=26)和整数m(m<=n),然后输入n个不同的字母,请编写程序输出在这n个字母中选择m个字母的所有排列序列和组合序列。
import itertools m=input() n=int(input()) arr = input().split(" ") print(arr) a = list(itertools.combinations(arr,n)) b = list(itertools.permutations(arr,n)) 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()
【Python0003】蒙特·卡罗法计算圆周率
【题目描述】
蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题。假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法。编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。
import random a=int(input("请输入次数:")) flag=0 for i in range(0,a+1): x=random.uniform(0,2)-1 #生成0-2之间的随机数,圆心(1,1) y=random.uniform(0,2)-1 if (x*x+y*y)<=1: flag+=1 print(flag/a*4)
Python0004】验证6174猜想
【题目描述】
1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。请编写程序验证这个猜想。
def Min(a): a=str(a) arr=[] for i in range(0,4): arr.append(a[i]) arr.sort() #升序排列 return int(''.join(arr)) #将生成的字符串序列转换为int并返回 def Max(a): a=str(a) arr=[] for i in range(0,4): arr.append(a[i]) arr.sort(reverse=True) #降序排列 return int(''.join(arr)) flag=0 x = input("请输入4位数:") while (1000<int(x)<10000 and int(x) != 6174): x=Max(x)-Min(x) flag+=1 print(x,end=" ") print("输入有误")
【Python0005】模拟页面调度LRU算法
【题目描述】
所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。
问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输出发生的缺页次数。
def LRU(xxs, maxNum,n): list = [] flag = 0 for xx in list: num = len(list) if num < n: flag += 1 list.append(xx) elif num == n: #要访问的新页面已在主存块中 if xx in list: #处理“主存块”,把最新访问的页面交换到列表尾部 pos = list.find(xx) list = list[:pos] + list[pos+1:] + xx else: #把最早访问的页面踢掉,调入新页面 list.pop(0) list.append(xx) flag += 1 return flag n=int(input()) lsit2=tuple(input().split(" ")) print(LRU(lsit2, 3,n))