排列组合序列

题目描述

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

 

import itertools

a = input("请输入整数n和整数m的值:")
a1 = a.split(" ")
for i in a1[::]:
    if i == '':
        a1.remove(i)

while True:
    b = input("请输入{}个字母:".format(a1[0]))
    b1 = b.split(" ")
    for i in b1[::]:
        if i == '':
            b1.remove(i)
    if len(b1) != 3:
        continue
    else:
        break
iter_perm = itertools.permutations(b1, int(a1[1]))
iter_comb = itertools.combinations(b1, int(a1[1]))
print("Permutation:")
for i in iter_perm:
    print(" ".join(i))
print("Combination:")
for i in iter_comb:
    print(" ".join(sorted(i)))
View Code

 

 

蒙特·卡罗法计算圆周率

题目描述

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

 

from random import random

count = int(input())
num = 0
for i in range(count):
    x = random()  # 生成0-1的随机数
    y = random()
    if pow(x * x + y * y, 0.5) <= 1:  # 四分之一正方形和圆,这时边长和圆的半径都为1,计算两点之间距离是否小于等于1
        num += 1

print(4 * (num / count))  # 计算出圆周率
View Code

 

 

验证6174猜想

题目描述

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

num = input()

data = [num]


def get6147(num):
    max = int("".join(sorted(list(num), reverse=True)))
    min = int("".join(sorted(list(num))))
    difference = max - min
    data.append(str(difference))
    if difference != 6174:
        get6147(str(difference))


get6147(num)
print(" ".join(data))
View Code

 

模拟页面调度LRU算法

题目描述

所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。

问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输出发生的缺页次数。

 

queue = []
count = 0
piece = int(input())
process = input()
page = process.split(" ")
for i in page[::]:
    if i == '':
        page.remove(i)
for i in range(0, len(page)):
    queue.append(page[i])
    if i == len(page) - 1:
        break
    if len(queue) == piece:
        j = 0
        while j in range(0, piece):
            if page[i + 1] == queue[j]:
                queue.append(queue[j])  # 如果后一个页面与这三个页面中的相同,那么就将这个页面提前
                queue.pop(j)    # 删除到原来所处的位置
                page.pop(i + 1)  # 删除,进入下一个页面
                j = 0
            else:
                j += 1
        queue.pop(0) # 淘汰页面
        count += 1
print(count)
View Code

 

 

posted on 2023-04-25 20:22  夜的第七章i  阅读(9)  评论(0编辑  收藏  举报