Python(第十五周)

1.jmu-python-杨辉三角 (10 分)

根据输入的n打印n行杨辉三角型。

函数接口定义:

printYanghui(n):#打印n行杨辉三角型

裁判测试程序样例:

/* 请在这里填写答案 */
n = int(input())        
printYanghui(n)

输入格式:
输入n,转化为整数

输出格式:
每个数后面均有一个空格。

输入样例:
5
结尾无空行
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

def printYanghui(n):  # 打印n行杨辉三角型
    l = []
    for i in range(n + 1):
        l.append(list(0 for i in range(n + 1)))
    l[1][1] = 1
    for i in range(2, n + 1):
        for j in range(1, n + 1):
            l[i][j] = l[i - 1][j] + l[i - 1][j - 1]

    for i in range(1, n + 1):
        for s in range(n - i):
            print(" ", end='')
        for j in range(1, i + 1):
            print(l[i][j], end=" ")
        print()

2.python函数:对字符串数值类型判断 (10 分)

实现isNum()函数,参数为一个字符串,如果这个字符串属于整数(十进制)、浮点数或复数的表示,返回True,否则返回False。

函数接口定义:

函数接口:
isNum(x)

x是个字符串

裁判测试程序样例:


/* 请在这里填写答案 */
在这里给出函数被调用进行测试的例子。例如:
x=input()
print(isNum(x))

输入样例:
在这里给出一组输入。例如:

12.345
结尾无空行
输出样例:
在这里给出相应的输出。例如:

True
结尾无空行
输入样例:
在这里给出一组输入。例如:

abc*
结尾无空行
输出样例:
在这里给出相应的输出。例如:

False

def isNum(x):
    try:
        y = eval(x)
        if (type(y) == int and x.isdigit()) or type(y) == float or type(y) == complex:
            return True
        else:
            return False
    except:
        return False

3.6-3 使用函数求余弦函数的近似值 (20 分)

本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps(绝对值小于eps的项不要加):
在这里插入图片描述
函数接口定义:funcos(eps,x ),其中用户传入的参数为eps和x;函数funcos应返回用给定公式计算出来,保留小数4位。

函数接口定义:

函数接口:
funcos(eps,x ),返回cos(x)的值。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:


/* 请在这里填写答案 */

eps=float(input())
x=float(input())
value=funcos(eps,x )
print("cos({0}) = {1:.4f}".format(x,value))

输入样例:
0.0001 -3.1

输出样例:
cos(-3.1) = -0.9991

import math


def funcos(eps, x):
    t = 0
    i = 0
    sum = 0
    while True:
        s = pow(-1, i) * x ** t / math.factorial(t)
        if abs(s) < eps:
            break
        sum += s
        t += 2
        i += 1
    return sum

4.求完全数的字典集 (30 分)

本题目要求读入2个正整数m和n,且m<n,求[m,n]之间所有的完全数,并形成字典。完全数:除了自己本身以外所有因子的和等于本身的数。例如6的因子为1,2,3,1+2+3=6,6即为完全数。

输入格式:
以空格分隔输入m,n两个数。

输出格式:
输出得到的字典。

输入样例1:
6 80
结尾无空行
输出样例1:
{6: [1, 2, 3], 28: [1, 2, 4, 7, 14]}
结尾无空行

输入样例2:
-8 -5
结尾无空行
输出样例2:
wrong input

m, n = map(int, input().split())
if m <= 0 or n <= 0 or m >= n:
    print("wrong input")
else:
    d = {}
    for x in range(m, n + 1):
        s = [i for i in range(1, x) if x % i == 0]
        if x == sum(s):
            d[x] = s
    print(d)

5.阶乘应用 (70 分)

输入大于1的正整数m,计算1×2×3×4×5…×n的积小于m时最大的n。

输入格式:
输入大于1的正整数m

输出格式:
输出n的值

输入样例:
20000
结尾无空行

输出样例:
n= 7
结尾无空行

m = eval(input())
while True:
    s = 1
    for i in range(2, m + 1):
        s *= i
        if s < m:
            n = i
        else:
            break
    if s >= m:
        break

print("n= {}".format(n))

6.数字螺旋方阵 (10 分)

已知n=5、6时的螺旋方阵如输出样例所示,请观察并得到其规律。输入一个正整数n,要求输出n×n个数字构成的螺旋方阵。

输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个正整数n(n≤20)。

输出格式:
对于每组测试,输出n×n的数字螺旋方阵。各行中的每个数据按4位字符宽度输出。

输入样例:
2
5
6

输出样例:
25 24 23 22 21
10 9 8 7 20
11 2 1 6 19
12 3 4 5 18
13 14 15 16 17
36 35 34 33 32 31
17 16 15 14 13 30
18 5 4 3 12 29
19 6 1 2 11 28
20 7 8 9 10 27
21 22 23 24 25 26

def dfs(arr, x, y, num, n):
    if n <= 0: return 0
    if n == 1:
        arr[x][y] = num
    for i in range(n):
        arr[x][y + i] = num
        num -= 1
    for i in range(n - 1):
        arr[x + 1 + i][y + n - 1] = num
        num -= 1
    for i in range(n - 1):
        arr[x + n - 1][y + n - 2 - i] = num
        num -= 1
    for i in range(n - 2):
        arr[x + n - 2 - i][y] = num
        num -= 1
    dfs(arr, x + 1, y + 1, num, n - 2)


t = eval(input())
for i in range(t):
    n = eval(input())
    ls = [[0] * n for i in range(n)]
    dfs(ls, 0, 0, n * n, n)
    for x in ls:
        print("%4d" * n % tuple(x))

7.期末答疑安排 (70 分)

期末安排教师线上答疑,因作息不同,各教师的答疑时间不同,形成如下表格,编写程序当输入星期、小时和分钟,输出对应的答疑教师,如若时间不对,输出“时间错误“,若当时没安排教师则输出“此时无教师答疑”
在这里插入图片描述
输入格式:
第一行输入星期 第二行输入小时 第三行输入分钟

输出格式:
输出对应教师或“此时无教师答疑”或“时间错误“

输入样例1:

12
34

输出样例1:
此时无教师答疑

输入样例2:

20
34

输出样例2:
B

输入样例3:

23
89

输出样例3:
时间错误

dic1 = {"一": "A", "二": "B", "三": "C", "四": "D", "五": "E"}
dic2 = {'一': 9, '二': 20, '三': 13, '四': 20, '五': 13}
day = input()
h = int(input())
m = int(input())

if day not in dic2 or h > 24 or h < 0 or m >= 60 or m < 0 or (h == 24 and m > 0):
    print("时间错误")
else:
    if dic2[day] == h:
        print(dic1[day])
    elif dic2[day] == h + 1 and m <= 30:
        print(dic1[day])
    else:
        print("此时无教师答疑")

8.学生成绩分析 (10 分)

输入考试的成绩(可以有小数),求出各分数与平均分的差值绝对值(保留一位小数),输出按差值绝对值从小到大排列的(分数,差值绝对值)列表。

输入格式:
第一行输入同学们的考试成绩,以空格隔开。

输出格式:
输出排好序的(分数,差值绝对值)列表。

输入样例:
66 78 95 63 85 94 99

输出样例:
[(85, 2.1), (78, 4.9), (94, 11.1), (95, 12.1), (99, 16.1), (66, 16.9), (63, 19.9)]

grades = list(map(str, input().split()))
g = []
for x in grades:
    g.append(eval(x))
aveage = sum(g) / len(g)
lis = []
for i in range(len(g)):
    lis.append((g[i], round(abs(aveage - g[i]), 1)))
print(sorted(lis, key=lambda x: x[1]))

9. 空心菱形 (10 分)

请编写程序,输入菱形的高,输出由星号勾勒出的菱形。

输入格式
行数(正整数)

输出格式
若行数为奇数,则显示星号勾勒出的菱形,否则显示错误信息。

输入样例1
5
输出样例1

  *
 * *
*   *
 * *
  *

输入样例2
8
输出样例2
Error

n = eval(input())
if n % 2 != 0:
    for i in range(n):
        if i == 0 or i == n - 1:
            for j in range(n // 2):
                print(" ", end="")
            print("*", end="")

        elif i <= n // 2:
            for j in range(n // 2 - i):
                print(" ", end="")
            print("*", end="")
            for j in range(n - (n // 2 - i) * 2 - 2):
                print(" ", end="")
            print("*", end="")
        else:
            for j in range(n // 2 - (n - 1 - i)):
                print(" ", end="")
            print("*", end="")
            for j in range(n - (n // 2 - (n - 1 - i)) * 2 - 2):
                print(" ", end="")
            print("*", end="")
        print()

else:
    print("Error")

9.搬砖 (10 分)

某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。如果想用n人正好搬n块砖(注意小孩的人数只能是偶数),问有多少种搬法?(注意当某类人数为0时,也是合理的方案)

输入格式:

输入在一行中给出一个正整数n。

输出格式:
直接输出方案的数目。

输入样例1:
45

输出样例1:
4

输入样例2:
4

输出样例2:
0

n = eval(input())
if n < 8 and (n != 3 or n != 5):
    print("0")
else:
    sum = 0
    for i in range(n // 5 + 1):
        if (n - 5 * i) % 3 == 0:
            sum += 1
    print(sum)

10.买玩具 (10 分)

某小学要购置文具。批发市场中A牌的铅笔卖5元一支,C牌的铅笔卖2元一支,D牌的简易铅笔卖1元2只(捆绑销售,只能买偶数只)。如果想用n元买n支笔,问有多少种买法?(注意当某牌的铅笔为0支时,也是合理的方案)

输入格式:
在一行中输入一个正整数n。

输出格式:
直接输出方案的数目。

输入样例1:
450

输出样例1:
51

输入样例2:
5

输出样例2:
0

n = eval(input())
if n % 3 != 0:
    print("0")
else:
    sum = 0
    for i in range(n // 9 + 1):
        if (n - 9 * i) % 3 == 0:
            sum += 1
    print(sum)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值