【Python0002】排列组合序列 (10分)

【题目描述】

用户输入整数n(1<=n<=26)和整数m(m<=n),然后输入n个不同的字母,请编写程序输出在这n个字母中选择m个字母的所有排列序列和组合序列。(10分)

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在第一行中输入整数n和整数m的值,数据之间以空格为间隔。 在第二行中输入n个不同字母,数据之间以空格为间隔

【输出格式】

首先输出所有的排列数列,每种情况一行,字母间以空格为间隔; 再者首先输出所有的组合数列,每种情况一行,在同一行中以字母增序顺序显示,字母间以空格为间隔。

【输入样例】

3  2
a s d
 

【输出样例】

Permutation:
a d
d a
a s
s a
d s
s d
Combination:
a d
a s
d s
import itertools
#信1705-1李嘉兴

num=input().split(" ")
num1=int(num[1])
arr = input().split(" ")
print(arr)
a = list(itertools.combinations(arr,num1))
b = list(itertools.permutations(arr,num1))
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()
8-2 【Python0003】蒙特·卡罗法计算圆周率 (10分)
 

【题目描述】

蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题。假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法,如下图所示。编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。(10分)

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在一行中输入掷飞镖的次数。

【输出格式】

输出采用蒙特·卡罗法模拟计算出的圆周率的值。

【输入样例】

100000
 

【输出样例】

3.13056
import random
#信1705-1李嘉兴
#使用扩展库 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)

 

8-3 【Python0004】验证6174猜想 (10分)
 

【题目描述】

1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。请编写程序验证这个猜想。(10分)

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在一行中输入一个任意各位数字不相同的4位数。

【输出格式】

验证6174猜想,输出过程中计算得到的各数,数据间以空格为间隔。

【输入样例】

2694
 

【输出样例】

2694 7173 6354 3087 8352 6174

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=" ")
8-4 【Python0005】模拟页面调度LRU算法 (10分)
 

【题目描述】

所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。 问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输出发生的缺页次数。(10分)

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在第一行中输入进程获得使用权的主存块数量n。 在第二行中输入进程访问页面的次序,各数据之间以空格为间隔。

【输出格式】

输出对于给定的n和进程访问页面的次序,输出采用LRU算法时的缺页次数。

【输入样例】

3
1 2 3 4 1 2 5 1 2 3 4 5
 

【输出样例】

7

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))
8-5 【Python0006】爬楼梯 (10分)
 

【题目描述】

假设一段楼梯共n(n>1)个台阶,小朋友一步最多能上3个台阶,那么小朋友上这段楼梯一共有多少种方法。(10分)

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在一行中输入楼梯台阶的数目n。

【输出格式】

输出小朋友上这段楼梯的方法数。

【输入样例】

15
 

【输出样例】

5768

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())))

参考地址:https://www.cnblogs.com/miria-486/p/11075405.html