《python程序设计题目》

Python刷题

题目:第4章-21 判断上三角矩阵 (15 分)

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。

输入样例:

3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6

输出样例:

YES
NO
NO

一、代码

t = int(input())
for i in range(t):
    flag = 1
    n = int(input())
    for j in range(n):
        a = list(map(int,input().split()))
        for b in range(j):
            if a[b] != 0:
                flag = 0
                break
    if flag == 1:
        print('YES')
    else:
        print('NO')

二、心得

1.解决上三角矩阵判断

题目:第4章-22 找鞍点 (20 分)

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

输出样例1:

2 1

输入样例2:

2
1 7
4 1

输出样例2:

NONE

一、代码

n=int(input())
a=[]
for i in range(n):
    s=input()
    a.append([int(n) for n in s.split()])
for i in range(n):    
    for j in range(n):
        flag=True
        if a[i][j]==max(a[i]):#第(i,j)是该行max
            for k in range(n):
                if a[i][j]>a[k][j]:#判断是不是该列min                    
                    flag=False
                    break
            if flag==True:                
                print(i,j)
                exit()
print('NONE')

二、心得

1.矩阵知识的掌握以及算法表达
2 a.append(value) 在列表尾中插入成员

题目:第4章-23 求矩阵的局部极大值 (15 分)

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

输入格式:
输入在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。

输出格式:
每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。

输入样例1:

4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1

输出样例1:

9 2 3
5 3 2
5 3 4

输入样例2:

3 5
1 1 1 1 1
9 3 9 9 1
1 5 3 5 1

输出样例2:

None 3 5

一、代码

m,n=map(int,input().split())
a=[]
count=0
for i in range(m):
    s=input()
    a.append([int(b) for b in s.split()])
for i in range(1,m-1):
    for j in range(1,n-1):
        if a[i][j]>a[i+1][j] and a[i][j]>a[i][j+1] and a[i][j]>a[i-1][j] and a[i][j]>a[i][j-1]:
            print("{} {} {}".format(a[i][j],i+1,j+1))
            count+=1
if count==0:
    print("{} {} {}".format("None",m,n))

二、心得

  1. 列表巧妙赋值方法: a.append([int(b) for b in s.split()])
  2. 二维矩阵的算法实现思想

题目:第4章-24 打印九九口诀表 (15 分)

下面是一个完整的下三角九九口诀表:

11=1
1
2=2 22=4
1
3=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
1
6=6 26=12 36=18 46=24 56=30 66=36
1
7=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 9*9=81

本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。

输入格式:
输入在一行中给出一个正整数N(1≤N≤9)。

输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:

4

输出样例:

11=1
1
2=2 22=4
1
3=3 23=6 33=9
14=4 24=8 34=12 44=16

一、代码

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

二、心得

对于规定输出间隔多少通过 print( “{:<Td}”.format(a) ) 右对齐T个单位输出a

题目:第4章-25 输出三角形字符阵列 (15 分)

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

输入格式:
输入在一行中给出一个正整数n(1≤n<7)。

输出格式:
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。

输入样例:

4

输出样例:

A B C D
E F G
H I
J

一、代码

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

二、心得

题目:第4章-26 求1!+3!+5!+……+n! (10 分)

求1!+3!+5!+……+n!的和,要求用循环嵌套设计,n<12。

输入格式:
输入在一行中给出一个不超过12的正整数n。

输出格式:
在一行中按照格式“n=n值,s=阶乘和”的顺序输出,其中阶乘和是正整数。

输入样例:

5

输出样例:

n=5,s=127

一、代码

import math
n = int(input());s = 0
for i in range(1,n+1,2):
    s += math.factorial(i)
print("n = {},s = {}".format(n,s))

二、心得

内置函数math.factorial(s) 求s阶乘

题目:第4章-27 二维数组中每行最大值和每行和 (10 分)

求一个3*3二维数组中每行的最大值和每行的和。

输入格式:
在一行中输入9个小于100的整数,其间各以一个空格间隔

输出格式:
输出3行3列的二维数组,并在每行后面分别输出每行最大值和每行元素的和,每个数据输出占4列。

输入样例:

3 6 5 9 8 2 1 4 5

输出样例:

3 6 5 6 14
9 8 2 9 19
1 4 5 5 10

一、代码

arr = list(map(int, input().split()))
for i in range(0,7,3):
    for j in arr[i:i+3]:
        print('{:>4}'.format(j),end='')
    print('{:>4}{:>4}'.format(max(arr[i:i+3]), sum(arr[i:i+3])))

二、心得

1.print(’{:>T}’.format(a),end=’’) 间隔T个单位输出a,**end=""**表示不过段
2. max(lst) 求lst最大的值

题目:第4章-28 矩阵转置 (10 分)

将一个3×3矩阵转置(即行和列互换)。

输入格式:
在一行中输入9个小于100的整数,其间各以一个空格间隔。

输出格式:
输出3行3列的二维数组,每个数据输出占4列。

输入样例:

1 2 3 4 5 6 7 8 9

输出样例:

1 4 7
2 5 8
3 6 9

一、代码

s=list(map(int,input().split()))
for i in range(0,3):
    print("{:>4}{:>4}{:>4}".format(s[i],s[i+3],s[i+6]))  

二、心得

print(’{:>T}’.format(a),end=’’) 间隔T个单位输出

题目:第4章-29 找出不是两个数组共有的元素 (20 分)

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:

10 3 -5 2 8 0 3 5 -15 9 100

11 6 4 8 2 6 -5 9 0 100 8 1

输出样例:

3 5 -15 6 4 1

一、代码

tep=list(input().split()[1:])
tep1=list(input().split()[1:])
a,b=set(tep),set(tep1)
tep.extend(tep1)
print(' '.join(sorted(list(a^b),key=tep.index)))

二、心得

1.extend() 函数用于在列表末尾一次性追加另一个序列中的多个值
2.. join (): 连接字符串数组
3sorted () 是对序列(列表、元组、字典、集合、还包括字符串)进行排序。

题目:第4章-30 找完数 (20 分)

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

输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。

输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

输入样例:

2 30

输出样例:

6 = 1 + 2 + 3

28 = 1 + 2 + 4 + 7 + 14

一、代码

import math
def wq(x):
    lst = [1]
    result = 0
    for j in range(2,int(math.sqrt(x))+1):
        if x%j == 0:
            lst.append(j)
            lst.append(x//j)
    if sum(lst) == x:
        lst.sort()
        print('{} = {}'.format(x," + ".join('%s' %id for id in lst)))
        result = 1
    return result
m,n=input().split()
m = int(m)
n = int(n)
count = 0
for i in range (m,n+1):
    if wq(i) == 1:
        count += 1
if count == 0:
    print('None')

二、心得

1.**math.sqrt(x)**取根号
2. lst.append(value) 列表lst末尾追加value
3. sum(lst) 求lst总和
4. a//b 取整除
5. . join (): 连接字符串数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值