posts - 296,comments - 1,views - 2995

一.所花时间

1h

二.代码量

200行

三.博客量

1篇

四.了解到的知识点

题目描述】用户输入整数n(1<=n<=26)和整数m(m<=n),然后输入n个不同的字母,请编写程序输出在这n个字母中选择m个字母的所有排列序列和组合序列。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】在第一行中输入整数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

# 输入n和m的值
n, m = map(int, input().split())

# 输入n个不同的字母,以空格分隔
letters = input().split()

# 输出排列序列
print("Permutation:")
for perm in itertools.permutations(letters, m):
    print(' '.join(perm))

# 输出组合序列
print("Combination:")
for comb in itertools.combinations(sorted(letters), m):
    print(' '.join(comb))

 

Python0003】蒙特·卡罗法计算圆周率

题目描述】

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

import random
#使用扩展库 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)

 

Python0004】验证6174猜想

题目描述】

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

def kaprekar(num):
    # 将数字转换为4位字符串
    num_str = str(num)
    # 判断4位数字是否有重复
    if len(num_str) != len(set(num_str)):
        print("输入有误,请输入4位各不相同数字")
        return 0
    count = 0
    # 循环
    while num != 6174:
        # 分别将数字从大到小和从小到大排序
        num1 = int(''.join(sorted(num_str, reverse=True)))
        num2 = int(''.join(sorted(num_str)))
        # 两数相减
        num = num1 - num2
        # 操作次数加一
        count += 1
        # 输出每次操作的过程
        print("第%s次 max=%s min=%s max-min=%s" % (count, num1, num2, num))
        # 将得到的数字再转换为4位字符串
        num_str = str(num)
    return count

# 输入
num = input("请输入4位各不相同的数字:")
# 输出结果
print("总次数:%s" % kaprekar(num))

 

Python0005】模拟页面调度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)

 

Python0006】爬楼梯

题目描述】

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

n = int(input())
a = 1#第一层台阶只有一种上法
b = 2#第二层台阶有两种上法
c = 4#第三层台阶有4中上法
for i in range(n-3):
    m=a+b+c
    a=b
    b=c
    c=m
print(c)

Python0007】杨辉三角形

题目描述】

输出n(0<n)行杨辉三角形,n由用户输入

n = int(input("请输入要打印的杨辉三角的行数: "))
# 初始化杨辉三角的第一行
triangle = [[1]]
# 循环生成杨辉三角
for i in range(1, n):
    # 初始化当前行的第一个元素为1
    row = [1]
    # 循环生成当前行的中间元素
    for j in range(1, i):
        # 当前元素等于上一行中前一个元素和同一位置元素的和
        element = triangle[i - 1][j - 1] + triangle[i - 1][j]
        # 将当前元素加入当前行
        row.append(element)
    # 将当前行的最后一个元素设为1
    row.append(1)
    # 将当前行加入杨辉三角
    triangle.append(row)

# 循环输出杨辉三角
for i in range(n):
    # 计算当前行前面需要填充的空格数量
    spaces = ' ' * (n - i)
    # 用join函数将当前行中的数字转为字符串,并用空格连接
    # 然后再在前面添加空格,输出当前行
    print(spaces + ' '.join(map(str, triangle[i])))

 

Python0008】筛法求素数

题目描述】

用户输入整数n和m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数。

def sieve(n, m):
    """
    输入两个正整数n和m,返回[n,m]范围内的所有素数的列表
    """
    # 初始化一个长度为m-n+1的列表,用于标记数值是否为素数
    is_prime = [True] * (m - n + 1)
    # 如果n为1,则将1标记为合数
    if n == 1:
        is_prime[0] = False
    # 从2开始,将所有能被2整除的数标记为合数
    for i in range(2, int(m ** 0.5) + 1):
        for j in range(max(i ** 2, (n + i - 1) // i * i), m + 1, i):
            if j >= n and is_prime[j - n]:
                is_prime[j - n] = False
    # 将所有未被标记为合数的数加入素数列表
    primes = [i + n for i in range(m - n + 1) if is_prime[i]]
    return primes

# 输入n和m
n, m = map(int, input("请输入n和m(1 < n < m < 1000):").split())
if not 1 < n < m < 1000:
    print("输入有误,请重新输入")
    n, m = map(int, input("请输入n和m(1 < n < m < 1000):").split())
else:
    print("该范围内的所有素数为:", end='')
    print(sieve(n, m))

Python0009】查找鞍点

题目描述】

对于给定5X5的整数矩阵,设计算法查找出所有的鞍点的信息(包括鞍点的值和行、列坐标,坐标从1开始)。

提示:鞍点的特点:列上最小,行上最大。

matrix = []
matrix2 = []
matrix3 = []
for i in range(5):
    a = input()
    a1 = a.split(" ")  # a1中的元素都是字符串,需要转换
    for i in a1[::]:
        if i == '':
            a1.remove(i)  # 去掉空元素
    a1 = [int(x) for x in a1]  # 将其中的元素转为int类型,方便排序
    matrix.append(a1)  # 插入到一个新列表

for i in range(0, 5):
    matrix2 = []
    for j in range(0, 5):
        matrix2.append(matrix[j][i])
    matrix3.append(matrix2)  # 将每一列收集起来组合成新的列表

for i in range(0, 5):
    for j in range(0, 5):
        if matrix[i][j] == max(matrix[i]):  # 判断是否为该行最大值
            if matrix[i][j] == min(matrix3[j]):  # 判断是否为该列最小值
                print([i + 1, j + 1, matrix[i][j]], end="")

 

Python0010】正整数的因子展开式

【题目描述】

编写程序,输出一个给定正整数x(x>1)的质因子展开式。

a=int(input())
b=str(a)
num=[]
i=1
while i <= a:
    if a%i == 0:
        a = a/i
        num.append(i)

        i = 1
    i+=1
b+='='+str(num[1])
for j in num[2:]:
    b+="*"+str(j)
print(b)

 

Python0011】牛顿迭代法

【题目描述】

编写程序,使用牛顿迭代法求方程在x附近的一个实根。

num = input()
n1 = num.split(" ")
n = []
for i in n1[::]:
    if i == '':
        n1.remove(i)
for i in n1:
    n.append(float(i))

def f(x):
    return n[0] * pow(x, 3) + n[1] * pow(x, 2) + n[2] * pow(x, 1) + n[3]

def fd(x):
    return 3 * n[0] * pow(x, 2) + 2 * n[1] * pow(x, 1) + n[2]

def newtonMethod(assum):
    x = assum
    a = f(x)
    b = fd(x)
    if f(x) == 0.0:
        print(round(x, 2))
        return x
    else:
        next = x - a / b
        # print('next x = ' + str(next))  # 输出下一条切线的值
    if a - f(next) < 1e-6:
        print(round(next, 2))  # 设置跳出条件,同时输出满足f(x) = 0 的x的值
    else:
        return newtonMethod(next)  # 递归

newtonMethod(n[4])

 

posted on   leapss  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示