ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PTA-浙大版 《Python程序设计》 第四章编程题目及答案(更新中)

2021-04-08 11:58:59  阅读:943  来源: 互联网

标签:Python 浙大 int range num PTA print data result



目录

第一题:生成输入数的乘方表 

第三题:显示指定范围的素数并求和

第五题:求分数序列前N项和 

第七题:最大公约数和最小公倍数 

第九题:求误差小于输入值的e的近似值 

第十一题:水仙花数

第十三题:找完数 

第十五题:特定矩阵元素和

第十九题:求矩阵的局部极大值 

第二十一题:显示直角数字图形 

第二十三题:显示Pascal三角形


第一题:生成输入数的乘方表 

输入一个非负数和正整数n,5<=n<=9,生成一张输入数的乘方表。

a,b = map(float,input().split())
for i in range(int(b) + 1):
    print("{}**{}={:.2f}".format(a, i, a**i))

第三题:显示指定范围的素数并求和

本题要求显示给定整数M和N区间内素数并对它们求和。

import math
a,b = map(int,input().split())
result = []
for i in range(a + 1,b):
    for j in range(2,i//2 + 1):
        if i % j == 0:
            break
    else:
        result.append(i)
for i in range(len(result)):
    print(result[i], end = ' ')
    if (i+1) % 5 == 0:
        print()
if len(result) % 5 != 0:
    print()
if result != []:
    print('amount=%d sum=%d'%(len(result),sum(result)))
else:   #最后一个测试用例是a,b之间没有素数,但是输出格式为两行:第一行为空,第二行为数量和总和
    print()
    print('amount=%d sum=%d'%(len(result),sum(result)))

这道题被最后一个测试用例绊了很久,最后终于发现是如果输入a、b两个数之间没有素数时,仍然会输出一行空值并换行,因此在程序最后需要对result的长度(或者result是否为空)做一下判断。


第五题:求分数序列前N项和 

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

num = int(input())
result = 0
first_deno = 2  #首项分母
first_num = 1   #首项分子
for i in range(num):
    result += first_deno / first_num
    mid = first_deno  
    first_deno = first_deno + first_num
    first_num = mid
print("%.2f" %result)

第七题:最大公约数和最小公倍数 

本题要求两个给定正整数的最大公约数和最小公倍数。

给定数A、B,则两者的最小公倍数(LCM)和最大公约数(GCD)满足:     LCM = \frac{A \times B}{GCD},所以只需要求得A、B的最大公约数即可。

a,b = map(int,input().split())
min_ = 1
for i in range(1,min(a,b) + 1):
    if a % i == 0 and b % i == 0:
        min_ = i
max_ = a * b / min_
print('%d %d' %(min_,max_))

第九题:求误差小于输入值的e的近似值 

自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。ei代表前i项求和。输入误差范围error,当ei+1-ei<error,则表示e的近似值满足误差范围。

import math
acc = float(input())
index = 0
sum_n = 0
while(True):
    value = 1/math.factorial(index) 
    index += 1
    sum_n += value
    if 1/math.factorial(index)  < acc: 
        sum_n += 1/math.factorial(index)
        break
print('%.6f'%sum_n)

第十一题:水仙花数

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。 例如:153=1×1×1+5×5×5+3×3×3。本题要求编写程序,计算所有N位水仙花数。

a = int(input())
for i in range(int('1' + '0' * (a - 1)), int('1' + '0' * a)):
    num = i
    i = list(str(i))
    sum_ = 0
    for j in i:
        sum_ += int(j)**a
    if sum_ == num:
        print(num)

第十三题:找完数 

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

import math
a,b = map(int,input().split())
index = 0
for i in range(a,b+1):
    list1 = [1]
    for j in range(2,int(math.sqrt(i))+1):
        if i % j == 0:
            list1.append(j)
            if i//j not in list1:
                list1.append(i//j)
    list1.sort()
    if sum(list1) == i:
        index = 1
        print(str(i) + ' = ' + ' + '.join(map(str,list1)))
              
if index == 0:
    print('None')

第十五题:特定矩阵元素和

给定一个n×n的方阵,本题要求计算该矩阵主、副对角线上的所有元素之和。主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线。

num = int(input())
result1 = 0
data = [None] * num
if num % 2 != 0:
    for i in range(num):
        data[i] = input().split()
        result1 += float(data[i][i]) + float(data[i][-1 - i])
    acc = float(data[num // 2][num // 2])
    result1 -= acc
else:
    for i in range(num):
        data[i] = input().split()
        result1 += float(data[i][i]) + float(data[i][-1 - i])
print('%.2f' %result1)

这里注意一下矩阵中的数据类型可能是整数也可能是浮点数,所以不要用int强制转换(最后一个测试用例应该就是float类型),也可以根据输出结果保留两位小数看出~【这个可能比较蠢,所以我卡了很久】


第十九题:求矩阵的局部极大值 

给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

a,b = map(int,input().split())
data = [None] * a
index = 0
for i in range(a):
    data[i] = input().split()
for i in range(1,a-1):
    for j in range(1,b-1):
        com = int(data[i][j])
        if com > int(data[i-1][j]) and com > int(data[i][j-1]) and com > int(data[i+1][j]) and com > int(data[i][j+1]):
            index = 1
            print('{} {} {}'.format(com,i+1,j+1))
if index == 0:
    print('None {} {}'.format(a,b))

第二十一题:显示直角数字图形 

本题目要求输入行数,输出指定行数的图形。

list1 = ['A','B','C','D','E','F','G','H','I','J']
num = int(input())
for i in range(num):
    result = ''
    for j in range(i+1):
        result += list1[j]
    print(result)

第二十三题:显示Pascal三角形

输入行数n,显示n行Pascal三角形。数字间有一个空格。每行最后一个数字后有一个空格。

Pascal三角形即杨辉三角,它的两条斜边由数字1组成的,而其余的数则是等于它肩上的两个数之和。其(n+1)行的本质为n次的二项式系数

num = int(input())
a = []
b = []
for i in range(1,num + 1):
    b = a[:]
    a = []
    for j in range(1,i + 1):
        if j == 1 or j == i:
            print(1,end = ' ')
            a.append(1)
        else:
            print(b[j - 2] + b[j - 1],end = ' ')
            a.append(b[j - 2] + b[j - 1])
    print('\n',end = '')

 

标签:Python,浙大,int,range,num,PTA,print,data,result
来源: https://blog.csdn.net/Legendwqs/article/details/115456157

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有