第4章-22 找鞍点
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的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
答案样例:

a = int(input())
list1 = []
for i in range(a):
list1.append(list(map(int,input().split())))
list2 = []
for i in range(a):# 这是把上面的列变成行
list2.append([x[i] for x in list1])
for m in range(a):
for n in range(a):
if list1[m][n] == max(list1[m]) and list1[m][n] == min(list2[n]):
print(f'{m} {n}')
exit()# 有就打印然后直接退出,因为题目保证只有一个鞍点所以就直接退出就好
print('NONE')
第4章-23 求矩阵的局部极大值
给定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
答案样例:
a,b = input().split()
a,b = int(a),int(b)
l = []
for i in range(a):
l.append(list(map(int,input().split())))
flag = True
for i in range(1,a-1):# 矩阵四周的就不用遍历了,不符合要求
for j in range(1,b-1):
if l[i][j]>l[i-1][j] and l[i][j]>l[i+1][j] and l[i][j]>l[i][j-1] and l[i][j]>l[i][j+1]:
print('{} {} {}'.format(l[i][j],i+1,j+1))
flag = False
if flag:
print(f'None {a} {b}')
第4章-24 打印九九口诀表
下面是一个完整的下三角九九口诀表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。
输入格式:
输入在一行中给出一个正整数N(1≤N≤9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
输入样例:
4
输出样例:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
答案样例:
def mul_table(n):
for i in range(1,n+1):
for j in range(1,i+1):
print('%d*%d=%-4d'%(j,i,j*i),end='')
# print('{}*{}={:<4d}'.format(j,i,i*j),end='')
print()
a = int(input())
mul_table(a)
第4章-25 输出三角形字符阵列
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
输入格式:
输入在一行中给出一个正整数n(1≤n<7)。
输出格式:
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。
输入样例:
4
输出样例:
A B C D
E F G
H I
J
答案样例:
a = int(input())
b = 65
c = a
for i in range(a):
count = 0
for j in range(c):
print('%c'%(b),end=' ')
b += 1
count += 1
if count == c:
c -= 1
print()
第4章-26 求1!+3!+5!+……+n!
求1!+3!+5!+……+n!的和,要求用循环嵌套设计,n<12。
输入格式:
输入在一行中给出一个不超过12的正整数n。
输出格式:
在一行中按照格式“n=n值,s=阶乘和”的顺序输出,其中阶乘和是正整数。
输入样例:
5
输出样例:
n=5,s=127
答案样例:
from math import factorial
n = int(input())
s = sum(factorial(i) for i in range(1,n+1,2))
print(f'n={n},s={s}')