最新 第十一届蓝桥杯软件类Python组(试题回忆+部分个人解答)( 二 )


参考验证代码:
def bubble_sort(arr):num = 0for i in range(len(arr)-1,0,-1):for j in range(i):if arr[j] > arr[j+1]:num += 1arr[j],arr[j+1] = arr[j+1],arr[j]return numprint(bubble_sort(list('jonmlkihgfedcba')))
运行结果是100
第六题到第十题就是编程题了,第六题第七题很基础,第八题开始就有难度了,
第六题. 成绩统计
问题:给定 n 个学生的成绩,大于等于60的为及格,大于等于85的为优秀 。请你统计这 n 名同学的及格率和优秀率 。

最新  第十一届蓝桥杯软件类Python组(试题回忆+部分个人解答)

文章插图
输入格式:第一行一个数n,表示接下来有n行数据,接下来n行每行一个数m,代表该学生的成绩 。
输出格式:两行,第一行一个数表示及格率,第二行一个数表示优秀率,都要求四舍五入 。
问题分析:该怎么算就不解释了哈,有点说道的地方就是后面的四舍五入和格式化输出了 。
参考代码:
n = int(input())num1 = 0num2 = 0for _ in range(n):score = int(input())if score >= 60:num1 += 1if score >= 85:num2 += 1print(str(round(num1*100/n))+'%')print(str(round(num2*100/n))+'%')
第七题. 单词分析
原问题:在给定的字符串中,计算出现次数最多的字母和它的出现次数,如果出现次数最多的字母同时有多个,则找出字典序最小的 。
输入格式:一行,代表所要统计的字符串
输出格式:两行,第一行一个字符,是出现最多的字母,第二行一个整数,该字母的出现次数 。
解题思路:开一个哈希表统计出现次数就好了 。然后从前开始遍历来保证找出的字母的字典序是最小的 。
参考代码:
cnt = [0]*26s = input()for alpha in s:cnt[ord(alpha) - ord('a')] += 1k = 0for i in range(26):if cnt[i] > cnt[k]:k = iprint(chr(k+ord('a')))print(cnt[k])
第八题. 数字三角形
原问题:在如下图所示的数字三角形中,我们需要从三角形顶部走到底部,在每一个数字处,我们可以选择向临近的右下或者临近的左下走,所经过的数字的总和称为路径和,请你计算从顶部到底部所有路线中最大的路径和为多少?同时要求这条路径选左下的次数和选右下的次数相差不能大于1 。
数字三角形
输入格式:第一行一个整数 n ,代表数字三角形的阶数,接下来 n 行中,第j 行有 j 个整数,代表数字三角形中的第j 层,整数之间用空格分割 。
输出格式:一个整数,代表最大的路径和 。
输入样例:
2 3
7 5 6
4 3 2 3
5 6 5 7 4
7 8 9 6 10 9
输出样例:
29
解题思路:是一个比较原型的动态规划问题,一层一层向下,注意最后输出时要选最后一行的中间两个或者一个 。规划过程如下图所示:
规划过程
路径和
参考代码:
n = int(input())matrix = [[0]*( _ + 1 ) for _ in range(n)]for i in range(n):tmp = [int(a) for a in input().split(' ')]matrix[i] = tmpdp = matrix[:]for i in range(1,n):for j in range(i+1):if j == 0:dp[i][j] += dp[i-1][j]elif j == i:dp[i][j] += dp[i-1][j-1]else:dp[i][j] += max(dp[i-1][j],dp[i-1][j-1])if n&1:print(dp[n-1][n//2])else:print(max(dp[n-1][n//2-1],dp[n-1][n//2]))
第九题. 平面划分
问题:给出N条直线的斜率和截距,计算这些直线会将xy平面划分为多少个区域 。
如图中所示,这些直线将平面划分为了7个区域 。
输入格式:第一行一个数 n 代表直线的个数,接下来 n 行每行两个整数,分别代表斜率和截距 。