2024年9月蓝桥杯蓝桥Python(国赛)中/高级
国赛
2024
2025-07-23 14:36:08
44次
一、单选题
二、编程题
相同颜色的石头
编程实现:
有两排石头,每排 n 颗,从左到右依次排开,每颗石头的颜色为黄色或者绿色。
每次可以选择第一排的任意一颗石头与第二排的任意一颗石头交换位置。请计算最少需要交换多少次才能让每一列石头的颜色都相同;如果无论交换多少次都无法使每一列石头的颜色都相同,则输出 -1。
例如:n = 3,每排 3 颗石头;
第一排 3 颗石头颜色从左到右依次是黄、绿、绿:

第二排 3 颗石头颜色从左到右依次是绿、绿、黄:

其中一种最少交换次数的方案如下:
(1)先将第一排的第 3 颗石头与第二排的第 3 颗石头交换位置;

(2)再将第一排的第 3 颗石头与第二排的第 1 颗石头交换位置。

此时每一列的石头颜色都相同,故至少需要交换 2 次。
输入描述:
第一行输入一个整数 n(1≤n≤10^5),表示每排的石头数量;
第二行输入 n 个整数,整数只能为 1 或 0,1 表示黄色,0 表示绿色,表示第一排从左到右每颗石头的颜色,整数之间以一个空格隔开;
第三行输入 n 个整数,整数只能为 1 或 0,1 表示黄色,0 表示绿色,表示第二排从左到右每颗石头的颜色,整数之间以一个空格隔开。
输出描述:
输出一个整数,表示最少的交换次数;如果无论交换多少次都无法使每一列的石头颜色都相同,则输出 -1。
样例输入:
3 1 0 0 0 0 1
样例输出:
2
【知识点】 蓝桥杯Python中/高级
五子棋
编程实现:
一张棋盘由 n 条横线与 n 条竖线垂直交叉构成。当前棋盘上的交叉位置已有若干黑棋。
现需在没有棋子的交叉位置落一颗黑棋,使得落子后,包含此棋子在内的横向或竖向或斜向能够形成连续五颗及以上的黑棋。
请计算一共有多少个位置满足要求;如果没有位置满足要求,输出 0。
以下图片是 4 种出现连续五颗黑棋的情况:

例如:n = 8;棋盘由 8 条横线和 8 条竖线垂直交叉构成,棋盘已有黑棋如下图:

可以在以下位置放置黑棋(位置已使用红色框标注)来满足要求:

一共有 5 个位置可以满足要求。
输入描述:
第一行输入一个整数 n(5≤n≤1000),表示棋盘的横线和竖线数量;
接下来输入 n 行,每行 n 个整数,整数只能为 0 或 1;0 表示该交叉位置没有黑棋,1 表示该交叉位置有黑棋,整数之间以一个空格隔开。
输出描述:
输出一个整数,表示满足题目要求的位置数量;如果没有位置满足要求,输出 0。
样例输入:
8 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
样例输出:
5
【知识点】 蓝桥杯Python中/高级
删除重复数
编程实现:
给定包含 n 个整数的列表,从左到右查看每个整数,对于其中重复出现的整数,仅保留位置最靠右的那个整数,其余位置的重复整数均删除。输出删除所有重复整数后的列表。
例如:n = 6;包含 6 个整数的列表为 [7, 10, 5, 5, 5, 10];其中重复出现的整数有 10、5,保留位置最靠右的 10 和 5,列表变为 [7, 5, 10]。
输入描述:
第一行输入一个整数 n(1≤n≤105);
第二行输入 n 个整数(1≤整数≤105),表示列表中从左到右的整数,整数之间以一个空格隔开。
输出描述:
按从左到右的顺序输出列表中的整数,表示删除重复整数后的结果,整数之间以一个空格隔开。
样例输入:
6 7 10 5 5 5 10
样例输出:
7 5 10
【知识点】 蓝桥杯Python中/高级
拆分正整数
编程实现:
给定一个正整数 n,将 n 拆成一组各不相同的正整数,使得这组正整数的个数大于等于 2 且总和为 n。
请计算有多少种不同的拆法;如果不能按要求拆分,输出 0。
注意:几种拆法中,如果包含的整数完全相同,仅顺序不同,则视为同一种拆法。例如:{1, 2, 3}、{2, 1, 3} 和 {3, 2, 1} 被视为同一种拆法。
例如:n = 6;满足要求的拆法有以下 3 种:
第一种:{1, 5};
第二种:{2, 4};
第三种:{1, 2, 3}。
输入描述:
输入一个正整数 n(1≤正整数≤90)。
输出描述:
输出一个整数,表示有多少种拆法满足要求。
样例输入:
6
样例输出:
3
【知识点】 蓝桥杯Python中/高级
移动小球
编程实现:
n 个小球从左到右排成一排,每个小球上都标有一个数值。接下来进行若干次操作,每次从以下操作中任选一项:
(1)移走一个小球,本次操作获得 1 积分;
(2)移走 k(k≥2)个小球,要求 k 个小球上的数值相同且位置连续,本次操作获得 k×k 的积分。
注:每次小球被移走后,剩余小球相对顺序不变,从左到右重新排成一排。
给定 n 个小球从左到右的数值,请计算将这 n 个小球全部移走后可获得的总积分的最大值。
例如:n = 5;5 个小球从左到右的数值依次为 1、1、4、1、5;可按以下操作移走小球:
第一次:将 1、1、4、1、5 中数值为 4 的小球移走,剩余小球排列为 1、1、1、5,本次操作获得 1 积分;
第二次:将 1、1、1、5 中数值为 1 的 3 个小球移走,剩余小球排列为 5,本次操作获得 9(3×3)积分;
第三次:将数值为 5 的小球移走,本次操作获得 1 积分;
最终获得的总积分的最大值为 11(1 + 9 + 1)。
输入描述:
第一行输入一个整数 n(1≤n≤100),表示小球的数量;
第二行输入 n 个整数(1≤整数≤100),表示从左到右每个小球的数值,整数之间以一个空格隔开。
输出描述:
输出一个整数,表示总积分的最大值。
样例输入:
5 1 1 4 1 5
样例输出:
11
【知识点】 蓝桥杯Python中/高级
