蓝桥杯——算法训练之杨辉三角形,最大最小公倍数,Torry的困惑,字符串对比,图形显示

tech2024-10-31  28

杨辉三角形

问题描述:杨辉三角又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中每个数字等于它两肩上的数字相加。

输入格式:输入一个数字n,代表杨辉三角形的行数

输出格式:输出三角形的前n行,每个数字之间用一个空格隔开

答题思路:通过生成一个n行n列的二维列表并进行赋值,再通过循环将结果不为0的数字依次输出。

n = int(input()) # 输入杨辉三角形的行数 intlist = [[0 for i in range(n)] for j in range(n)] # 列表推导式,生成一个n行n列的二维列表 for i in range(n): for j in range(i+1): if j == 0: intlist[i][j] = 1 else: intlist[i][j] = intlist[i-1][j-1] + intlist[i-1][j] for i in range(n): for j in range(n): if intlist[i][j] != 0: print(intlist[i][j], end=" ") print()

最大最小公倍数

问题描述:已知一个正整数N,问从1~N之间任选三个数,他们的最小公倍数最大可以是多少

输入格式:输入一个正整数

输出格式:输出一个正整数,表示你找到的最小公倍数

解题思路:有三种情况。第一种情况是三个数字互为质数,结果为三个数字之积;第二种情况是如果n是偶数且n不是3的倍数,结果为n*(n-1)(n-3);第三种情况是如果n为偶数且n是3的倍数,结果为(n-1)(n-2)*(n-3)。

while True: try: number = int(input()) if number%2 == 0 and number%3 != 0: product = number * (number-1) * (number-3) elif number%2 == 0 and number%3 == 0: product = (number-1) * (number-2) * (number-3) else: product = number * (number-1) * (number-2) print(product) except: break

Torry的困惑

问题描述:Torry从小喜欢数学,一天老师告诉他像2,3,5,7….这些数字都是质数。Torry突然想到一个问题,前100,1000,10000…个质数的乘积是多少,老师愣住了,你能计算出质数乘积模上50000的值吗?

输入格式:仅包含一个正整数n,其中n<=100000

输出格式:输出一行,即前n个质数的乘积模50000的值

解题思路:首先判断n的个数是否为1,如果为1,直接输出2;再经过循环选择n个质数内的所有质数并放入列表;最后将列表内所有数字逐个相乘并模50000,输出结果。

while True: try: n = int(input()) # 表示需要求的质数的个数 f = list() count = 0 if n == 1: print(2) else: for i in range(3, 100000): for j in range(2, i): if i%j == 0: break elif i%3 == 0 and i != 3: break elif i%5 == 0 and i != 5: break else: f.append(i) count += 1 break if count == n: break product = 2 for i in range(0, n-1): product = f[i] * product print(product % 50000) except: break

字符串对比

问题描述:给定两个仅由大写字母和小写字母组成的字符串(长度介于1-10之间)它们之间的关系是如下4种关系之一:

1:两个字符串长度不相等; 2:两个字符串长度相等且对应位置上的字符也相等(区分大小写); 3:两个字符串长度相等且对应位置上的字符也相等(不区分大小写); 4:两个字符串相等但是不区分大小写对应位置的字符也不相等; 编程判断输入的两个字符串之间的关系属于四类中的哪一类,给出所属类别的编号。

输入格式:包括两行,每行都是一个字符串

输出格式:仅有一个数字,代表两个字符串关系的编号

解题思路:通过四个判断语句得出结果。第一个直接判断长度;第二个判断是否完全一致;第三个通过将两个字符串都小写或大写再进行比较;如果不是以上三种情况,那就属于第四种了。

while True: try: m = list() for i in range(2): m.append(input()) if len(m[0]) != len(m[1]): print(1) elif m[0] == m[1]: print(2) elif str.lower(m[0]) == str.lower(m[1]): print(3) else: print(4) except: break

图形显示

问题描述:编写一个程序,首先输入一个整数(如5),然后再屏幕上显示出如下图形

输入格式:输入一个整数,代表行数

输出格式:输出图形

解题思路:通过循环输出*的数量递减(使用最简洁的语句输出结果)

while True: try: n = int(input()) for i in range(n): print('* ' * (n-i)) except: break
最新回复(0)