一、单选题
1、若想获得两个集合中不重复的元素,可以使用( )
A symmetric_difference()
B union()
C issubset()
D intersection()
解析:【喵呜刷题小喵解析】:若想获得两个集合中不重复的元素,可以使用对称差集函数`symmetric_difference()`。这个函数返回两个集合中不重复的元素,即只存在于其中一个集合中的元素。而`union()`函数返回两个集合的并集,即包含两个集合中所有元素的集合,`issubset()`函数判断一个集合是否是另一个集合的子集,`intersection()`函数返回两个集合的交集,即两个集合中共同存在的元素。因此,选项A `symmetric_difference()`是正确的。
2、已知: L = [1,2,3,4,5],执行 print(L[0] + L[-1])语句后,输出的结果是 ( )
A 4
B 5
C 6
D 7
解析:【喵呜刷题小喵解析】:在Python中,列表的索引是从0开始的。对于给定的列表L = [1,2,3,4,5],L[0]表示列表的第一个元素,即1;L[-1]表示列表的最后一个元素,即5。所以,print(L[0] + L[-1])的输出结果是1 + 5 = 6。因此,正确答案是C选项,即6。
3、执行 print(3 % 4)语句后,输出的结果是 ( )
A 0.75
B 3
C 4
D 12
解析:【喵呜刷题小喵解析】:在Python中,`%`运算符表示取模运算,即求两个数相除的余数。在这里,3除以4的余数是3,因此`print(3 % 4)`输出的结果是3,对应选项D。
4、以下哪个选项不可以作为字典的键? ( )
A 字符串
B 元组
C 整数
D 列表
解析:【喵呜刷题小喵解析】在Python中,字典的键必须是不可变的,这意味着它们不能是列表、字典或其他可变类型。因此,选项D中的列表不能作为字典的键。然而,字符串、元组和整数都是不可变的,所以它们都可以作为字典的键。
5、使用 open 函数,以二进制格式打开一个文件用于追加的模式是 ( )
A rb
B wb
C a+
D ab
解析:【喵呜刷题小喵解析】:在Python中,使用`open`函数打开文件时,模式参数用于指定打开文件的方式。对于二进制文件,模式通常以`b`结尾。对于追加模式,使用`a`。因此,要以二进制格式打开一个文件用于追加的模式是`a+b`,但`a+b`在Python中并不作为一个有效的模式。最接近的模式是`a+`,它表示以追加模式打开一个文件,允许读写操作。所以,选项C`a+`是正确的。其他选项`rb`(以二进制格式读取文件)、`wb`(以二进制格式写入文件,会覆盖原有内容)和`ab`(不是Python的有效模式)都是错误的。
二、实操题
6、编程实现:
给定一个字符,判断它是否是小写字母 a,如果是,就输出 Y,否则输出 N
例如: 给定的字符#,不是小写字母 a,输出 N。
输入描述
输入一个字符
输出描述
输出一个字符,如果输入的字符是小写字母 a,就输出 Y,否则输出 N
【样例输入】
#
【样例输出】
N
参考答案:br />根据题目要求,我们可以编写一个简单的程序来实现这个功能。下面是一个Python语言的示例代码:```pythonchar = input() # 从标准输入获取一个字符if char == 'a':print('Y')else:print('N')```这个程序首先通过`input()`函数从标准输入获取一个字符,然后判断这个字符是否等于'a'。如果是,就输出'Y',否则输出'N'。
解析:【喵呜刷题小喵解析】
这个题目要求我们判断输入的字符是否是小写字母'a',如果是,就输出'Y',否则输出'N'。这个问题可以通过编写一个简单的程序来解决。在Python语言中,我们可以使用`input()`函数从标准输入获取一个字符,然后使用条件语句来判断这个字符是否等于'a',最后根据判断结果输出相应的字符。这个程序的实现非常直观,符合题目要求。
7、编程实现:
给定一个小数 N (1.0<N<99.99) ,输出 N 的整数部分例如: N = 11.62,11.62的整数部分为 11,则输出 11。
输入描述
输入一个小数 N (1.0<N<99.99)
输出描述
输出一个整数,表示 N 的整数部分
【样例输入】
11.62
【样例输出】
11
参考答案:首先,读取输入的小数N,然后利用整数部分函数int()取整数部分,最后输出整数部分。
解析:【喵呜刷题小喵解析】:
这个问题是一个简单的编程问题,要求输出给定小数的整数部分。在大多数编程语言中,都有内置的函数可以完成这个任务。以Python为例,我们可以使用内置的int()函数来实现。这个函数会将输入的小数四舍五入到最接近的整数。因此,我们只需要读取输入的小数,调用int()函数,然后输出结果即可。对于题目中的输入和输出样例,这个程序可以正确地输出整数部分。
8、提示信息:
平方: 是一种运算,表示一个数与它自身相乘的乘积。
例如: 2 的平方为 4(4=2*2) ,5 的平方为 25 (25=5*5)
编程实现:
给定 N 个正整数 (1<N<100) ,计算出 N 个正整数中所有偶数的平方并按照输入的顺序输出。
例如:N = 5,5 个正整数分别为 1,4,3,2,4:其中偶数有 4、2、4;4 的平方为 16 (16=4*4) ,2 的平方为 4(4=2*2) ,4 的平方为 16 (16=4*4),输出的结果为 16,4,16。
输入描述
第一行输入一个正整数 N (1<N<100),表示正整数的个数第二行输入 N个正整数 (1<正整数<200) ,正整数之间以一个英文逗号隔开
输出描述
如果 N 个正整数中有偶数,则按照输入的顺序依次输出所有偶数的平方,平方数之间以一个英文逗号隔开,如果没有偶数,输出-1
【输入样例】
5 1,4,3,2,4
【输出样例】
16,4,16
参考答案:根据题目要求,我们需要先读取输入的N个正整数,然后找出其中的偶数,并计算它们的平方,最后按照输入的顺序输出。输入样例中,N=5,输入的5个正整数分别为1,4,3,2,4。其中,偶数有4,2,4。它们的平方分别为16,4,16。因此,输出的结果为16,4,16。
解析:【喵呜刷题小喵解析】:
本题主要考察的是编程的基本运算和数据处理能力。首先,我们需要读取输入的N个正整数,可以使用scanf函数或者getline函数来读取。然后,我们需要遍历这N个正整数,找出其中的偶数,并计算它们的平方。最后,我们需要按照输入的顺序输出这些平方数。
在输出时,我们需要注意每个平方数之间要用英文逗号隔开,最后一个平方数后面不需要再加逗号。如果输入的N个正整数中没有偶数,我们需要输出-1。
在编程实现时,我们可以使用C、C++、Java等语言来实现。这里以C++为例,可以使用vector来存储输入的N个正整数,然后使用遍历的方式找出其中的偶数,并计算它们的平方。最后,使用字符串流来输出结果。
具体的实现代码如下:
```cpp
#include
#include
#include
using namespace std;
int main() {
int N;
cin >> N;
vector
for (int i = 0; i < N; i++) {
cin >> nums[i];
}
ostringstream output;
bool has_even = false;
for (int i = 0; i < N; i++) {
if (nums[i] % 2 == 0) {
has_even = true;
output << nums[i] * nums[i];
if (i < N - 1) {
output << ",";
}
}
}
if (!has_even) {
cout << "-1" << endl;
} else {
cout << output.str() << endl;
}
return 0;
}
```
9、编程实现:
给定一个字符串 S (5<S 长度<50) ,请找出 S 中不含重复字符的最长子串的长度。
例如:s 为 ababc,其中 ababaababbababc,均为包含重复字符 的子串;而 ababbc 均为不含重复字符的子串,最长子串有 abc,所以不含重复字符的最长子串的长度为 3。
输入描述
输入一个字符串 S (5<S 长度<50)
输出描述
输出一个整数,表示 S 中不含重复字符的最长字串的长度
【输入样例】
ababc
【输出样例】
3
参考答案:```pythondef find_max_length(s):max_length = 0current_length = 0char_set = set()for char in s:if char in char_set:current_length = 0else:current_length += 1max_length = max(max_length, current_length)char_set.add(char)return max_lengths = input()print(find_max_length(s))```
解析:【喵呜刷题小喵解析】:
本题要求找出给定字符串中不含重复字符的最长子串的长度。可以使用滑动窗口的方法来解决这个问题。
首先,定义一个空集合 `char_set` 来保存当前窗口内的字符,初始长度为0。遍历字符串 `s`,如果当前字符在 `char_set` 中已经存在,说明当前窗口内有重复字符,需要将窗口左边界右移一位,同时将 `current_length` 重置为0。否则,将当前字符加入 `char_set`,并将 `current_length` 加1。在每次更新 `current_length` 后,将其与 `max_length` 比较,更新 `max_length` 的值。
最后,返回 `max_length` 即可。
在主函数中,首先读入字符串 `s`,然后调用 `find_max_length` 函数计算不含重复字符的最长子串的长度,并输出结果。
10、编程实现:(P1809 过河问题)
小青要赶 N (2<N<100) 匹小马过河,N 匹小马过河都需要一定的时间(分钟),小青每次过河最多能赶两匹小马 (骑一并赶一匹),返回时需骑一匹,每次过河的时间为走的慢的小马花费的时间。请计算至少需要多长时间才能把 N 匹小马全部赶过河。
例如: N = 4,4 匹小马过河需要的时间分别为 1,2,3,4 (单位: 分钟)。
用时最少的一种过河方式:
第一次:赶 1 分钟和 2 分钟的小马过河,然后骑 1 分钟的小马返回,共花费 3 分钟 (过去花费 2 分钟,回来花费 1 分钟)
第二次:赶 3 分钟和 4 分钟的小马过河,然后骑 2 分钟的小马返回,共花费 6 分钟 (过去花费 4 分钟,回来花费 2 分钟)
第三次: 赶 1 分钟和 2 分钟的小马过河,共花费 2 分钟 (过去花费 2 分钟)
总共最少花费的时间是 11 分钟(3+6+2=11)
输入说明
两行整数,第一行表示总共有多少匹马 N(2<N<100),第二行表示每匹马过河所需要的时间,数字之间以英文逗号隔开
输出说明
一行一个整数,表示将所有马儿赶过河所需要的最短时间
【输入样例】
4 1,2,3,4
【输出样例】
11
参考答案:根据题目要求,我们可以使用动态规划算法来解决这个问题。我们可以定义一个数组dp,其中dp[i]表示小青需要将前i匹小马全部赶过河所需的最短时间。我们可以按照小马过河所需时间从小到大的顺序进行遍历,对于每个小马j,我们需要计算两种情况下的时间,即赶j和j+1过河,然后返回骑j过河的时间加上dp[j+1]。另一种情况是只赶j过河,然后返回骑最快的小马过河的时间加上dp[j-1]。我们取这两种情况中的较小值作为dp[i]的值。最后返回dp[N]即可。
解析:【喵呜刷题小喵解析】:
这个问题可以使用动态规划算法来解决。首先,我们需要将输入的小马过河所需时间按照从小到大的顺序进行排序。然后,我们可以定义一个数组dp,其中dp[i]表示小青需要将前i匹小马全部赶过河所需的最短时间。我们可以按照小马过河所需时间从小到大的顺序进行遍历,对于每个小马j,我们需要计算两种情况下的时间,即赶j和j+1过河,然后返回骑j过河的时间加上dp[j+1]。另一种情况是只赶j过河,然后返回骑最快的小马过河的时间加上dp[j-1]。我们取这两种情况中的较小值作为dp[i]的值。最后返回dp[N]即可。
这个问题需要注意一些细节。首先,我们需要对输入的小马过河所需时间进行排序,否则会导致计算结果不正确。其次,我们需要在计算dp[i]的值时,需要保证j+1和j-1不会越界。最后,我们需要取两种情况下的较小值作为dp[i]的值,否则会导致计算结果偏大。
在实现代码时,我们可以使用一个循环来遍历小马过河所需时间,然后使用一个嵌套的循环来计算dp[i]的值。在计算dp[i]的值时,我们需要使用if语句来判断j+1和j-1是否越界,然后取两种情况下的较小值作为dp[i]的值。最后返回dp[N]即可。
具体的实现代码如下:
```python
def min_time(n, times):
times.sort() # 按照小马过河所需时间从小到大排序
dp = [0] * (n + 1)
for i in range(2, n + 1):
dp[i] = min(times[i - 1] + dp[i - 1], times[i - 2] + dp[i - 2])
return dp[n]
n = int(input().strip())
times = list(map(int, input().strip().split(',')))
print(min_time(n, times))
```
其中,min_time函数用于计算将所有小马赶过河所需的最短时间,输入参数为小马数量n和小马过河所需时间列表times。函数内部首先对times进行排序,然后定义一个数组dp,其中dp[i]表示小青需要将前i匹小马全部赶过河所需的最短时间。然后使用一个循环来遍历小马过河所需时间,使用一个嵌套的循环来计算dp[i]的值,最后返回dp[n]即可。
11、提示信息:
数字塔是由 N 行数堆积而成,最顶层只有一个数,次顶层两个数,以此类推。
相邻层之间的数用线连接,下一层的每个数与它上一层左上方和右上方的数连接 (左上方或右上方没有数则不需要连接)。
编程实现:
有一个 N 行 (0≤N≤50) 的数字塔,小蓝想要从最顶层开始,沿着线层一层向下移动,移动到最底层。小蓝想找出一条移动路径,使得路径上的数之和最大 (包含顶层和底层的数),请计算出最大的和是多少。
例如: N=5,5 层的数字塔,每层的数如下图所示:
从顶层数为 2 到底层数为 15 的路径上的数之和最大,最大和为 48。路径为:
2+3-18-10- 15。
输入描述
第一行输入一个正整数 N (2<N<50) ,表示数字塔的层数接下来输入 N 行,其中第一行为一个正整数,接下来每行的正整数比上一行多一个,每行的正整数之间以一个英文逗号隔开 (1<1 整数<1000)
输出描述
输出一个整数,表示从数字塔最顶层移动到最底层的路径上的数之和的最大值
【输入样例】
5 2 3,12 18,8,3 5,10,13,2 4,15,7,6,8
【输出样例
48
参考答案:```pythondef max_sum(n):nums = []for i in range(n):nums.append(list(map(int, input().split(','))))dp = [[0] * (len(nums[i]) + 1) for _ in range(n)]for i in range(n):for j in range(1, len(nums[i]) + 1):dp[i][j] = max(dp[i - 1][j - 1] + nums[i][j - 1], dp[i - 1][j])return dp[n - 1][len(nums[n - 1])]n = int(input())print(max_sum(n))```
解析:【喵呜刷题小喵解析】:
本题是一个动态规划问题,可以通过定义dp数组来解决。
首先,我们定义一个二维数组dp,其中dp[i][j]表示从顶层到第i层,且选取第i层的前j个数的最大和。
然后,我们遍历每一层,对于每一层,我们遍历其每一个数,选择取这个数或者不取这个数,然后更新dp数组。
最后,返回dp[n-1][len(nums[n-1])]即可,其中n是数字塔的层数,nums[n-1]是最后一层的数的列表。
需要注意的是,如果某一层只有一个数,我们只需要更新dp[i][1],不需要更新dp[i][0]。因为题目要求路径上的数之和最大,如果某一层只有一个数,那么我们必须选取这个数,所以dp[i][0]的值就是dp[i-1][0]。
以上代码的时间复杂度为O(n^2),其中n是数字塔的层数,满足题目要求的时间复杂度。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!