python 浙大-MOOC-PTA ch4

加粗的题目 有测试点未通过 有看出问题的 望大佬指导~~
7-1 生成3的乘方表 (15 分)
输入一个非负整数n,生成一张3的乘方表,输出3
​0~3n的值。可调用幂函数计算3的乘方。

a=int(input())
for i in range(a+1):
    print("pow({},{}) = {}".format(3,i,3**i))

7-2 统计素数并求和 (20 分)
本题要求统计给定整数M和N区间内素数的个数并对它们求和。

a,b=map(int,input().split())
def primer(x):
    count=0
    sum=0
    for i in range(1,x+1):
        flag=True
        for j in range(2,i):
            if i%j==0:
                flag=False
        if flag==True:
            count=count+1
            sum=sum+i
    return count,sum
x=primer(a)
y=primer(b)
print(y[0]-x[0],y[1]-x[1])

7-3 猴子吃桃问题 (15 分)
一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

n=int(input())
m=1
for i in range(n,1,-1):
    m=(m+1)*2
    #n=(n+1)<<1
print(m)

7-4 验证“哥德巴赫猜想” (20 分)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

import math
a=int(input())
def primer(x):
    flag=True
    for i in range(2,int(math.sqrt(x))+1):
        if x%i==0:
            flag=False
            break
    return flag
for i in range(2,a):
    if primer(i) and primer(a-i):
        print(a,'=',i,'+',a-i)
        break

7-5 求e的近似值 (15 分)
自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。

n=int(input())
def factorial(x):
    sum=1
    for i in range(1,x+1):
        sum*=i
    return sum
m=1
for i in range(1,n+1):
    m+=1/factorial(i)
if n==1:
    print("2.00000000")
elif n==0:
    print("1.00000000")
else:
    print('{:.9}'.format(m))

7-6 输出前 n 个Fibonacci数 (15 分)
本题要求编写程序,输出菲波那契(Fibonacci)数列的前N项,每行输出5个,题目保证输出结果在长整型范围内。Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如:1,1,2,3,5,8,13,…。

list1=[1,1]
for i in range(45):
    list1.append(list1[-1]+list1[-2])
# print(list1)
n=int(input())
for i in range(n):
    print('{:11}'.format(list1[i]),end='')
    if (i+1)%5==0 and i!=0 and n!=5:
        print()

7-7 统计学生平均成绩与及格人数 (15 分)
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。

n=int(input())
if n==0:
    print('average = 0.0')
    print('count = 0')
else:
    list=input().split()
    sum=0
    count=0
    for i in range(n):
        tmp=int(list[i])
        sum+=tmp
        if tmp>=60:
            count+=1
    print('average = {:.1f}'.format(sum/n))
    print('count = {}'.format(count))

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

n=int(input())
list=[1,2]
for i in range(n):
    list.append((list[-1]+list[-2]))
sum=0
for i in range(n):
    sum+=list[i+1]/list[i]
print('{:.2f}'.format(sum))

7-9 查询水果价格 (15 分)
给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。

print('[1] apple')
print('[2] pear')
print('[3] orange')
print('[4] grape')
print('[0] exit')
count=0
list=input().split()
for i in range(len(list)):
    x=int(list[i])
    count+=1
    if count==6:
        break
    elif x==0:
        break
    elif x==1:
        print('price = 3.00')
    elif x==2:
        print('price = 2.50')
    elif x==3:
        print('price = 4.10')
    elif x==4:
        print('price = 10.20')
    else:
        print('price = 0.00')

7-10 最大公约数和最小公倍数 (15 分)
本题要求两个给定正整数的最大公约数和最小公倍数。

m,n=map(int,input().split())
if m>n:
    m,n=n,m
for i in range(m,0,-1):
    if m%i==0 and n%i==0:
        yue=i
        break
print(yue,int(m*n/yue))

7-11 判断素数 (20 分)
判断一个给定的正整数是否素数

n=int(input())
list=[]
def ispremi(x):
    flag=True
    for i in range(2,x):
        if x%i==0:
            flag=False
            break
    if flag==True:
        print('Yes')
    else:
        print('No')
for i in range(n):
    x=int(input())
    list.append(x)
for i in list:
    ispremi(i)

7-19 矩阵运算 (20 分)
给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。

n=int(input())
a=[]
for i in range(n):
    b=input().split()
    a.insert(i,b)
suma=0
line=0
lastrow=0
lastcol=0
# for i in range(n):
#     for j in range(n):
#         sum+=int(a[i][j])
suma=sum(int(a[i][j]) for i in range(n) for j in range(n))
line=sum(int(a[i][n-1-i]) for i in range(n))
lastrow=sum(int(a[n-1][i]) for i in range(n))
lastcol=sum(int(a[i][n-1]) for i in range(n))
# print(suma)
# print(line)
# print(lastrow)
# print(lastcol)
print(suma-line-lastcol-lastrow+int(a[n-1][n-1])+int(a[0][n-1])+int(a[n-1][0]))

7-20 求矩阵各行元素之和 (15 分)
本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

m,n=map(int,input().split())
a=[]
for i in range(m):
    x=input().split()
    a.insert(i,x)
for i in range(m):
    print(sum(int(a[i][j]) for j in range(n)))

7-21 判断上三角矩阵 (15 分)
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

m=int(input())
k=0
while k<m:
    n=int(input())
    a=[]
    k+=1
    flag=True
    for j in range(n):
        x=input().split()
        a.insert(j,x)
    # print(a)
    for i in range(n):
        for j in range(i):
            if int(a[i][j])!=0:
                flag=False
                break
    if flag==True:
        print('YES')
    else:
        print('NO')

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

m,n=map(int,input().split())
a=[]
flag=False
for i in range(m):
    x=input().split()
    a.insert(i,x)
for i in range(1,m-1):
    for j in range(1,n-1):
        tmp=int(a[i][j])
        tmp1=int(a[i][j+1])
        tmp2=int(a[i][j-1])
        tmp3=int(a[i-1][j])
        tmp4=int(a[i+1][j])
        if tmp>tmp1 and tmp>tmp2 and tmp>tmp3 and tmp>tmp4:
            print(tmp,i+1,j+1)
            flag=True
if flag==False:
    print('None',m,n)

7-24 打印九九口诀表 (15 分)
下面是一个完整的下三角九九口诀表:

n=int(input())
for i in range(1,n+1):
    for j in range(1,i+1):
        print('{}*{}={:<4}'.format(j,i,j*i),end='')
    print()

7-25 输出三角形字符阵列 (15 分)
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。

n=int(input())
k=65
for i in range(n,0,-1):
    for j in range(i):
        print(chr(k),end=' ')
        k+=1
    print()

7-28 矩阵转置 (10 分)
将一个3×3矩阵转置(即行和列互换)。

a=input().split()
b=[]
c=[]
for i in a:
    b.append(int(i))
c.append(b[0:3])
c.append(b[3:6])
c.append(b[6:9])
d=[[row[col] for row in c]for col in range(3)]
for i in range(3):
    for j in range(3):
        print('{:>4}'.format(d[i][j]),end='')
    print()

7-29 找出不是两个数组共有的元素 (20 分)
给定两个整型数组,本题要求找出不是两者共有的元素。

# 遍历比较两个列表,取出不是共有的元素,然后用set去掉重复的数字
c=[]
k = 0
flag = 1
a = list(map(int, input().split()))
b = list(map(int, input().split()))
m = a[0]
n = b[0]
a = a[1:]
b = b[1:]
for i in range(0, m):
    for j in range(0,n):
        if (int(a[i]) == int(b[j])):
            flag=0
            break
    if (flag==1):
        c.append(a[i])
        k=k+1
    flag=1
for i in range(0,n):
    for j in range(0,m):
        if (int(b[i]) == int(a[j])):
            flag=0
            break
    if (flag==1):
        c.append(b[i])
        k=k+1
    flag=1
res = list(set(c))
res.sort(key = c.index)
print(res[0],end="")
for i in range(1,len(res)):
    print(' {:d}'.format(res[i]),end="")

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

import math
m,n=map(int,input().split())
count=0
for i in range(m,n+1):
    lst1=[1]
    for k in range(2,int(math.sqrt(i))+1):
        if i%k==0:
            lst1.append(k)
            if i//k not in lst1:
                lst1.append(i//k)
    lst1.sort()
    factorsum=sum(lst1)
    if i==factorsum:
        count+=1
        print(str(i)+' = '+' + '.join(map(str,lst1)))
if count==0:
    print('None')

你可能感兴趣的:(PAT)