一、单选题
1、下列二进制数中最大的是( )。
A 110
B 1010
C 1100
D 1001
解析:【喵呜刷题小喵解析】:
首先,我们需要将每个选项的二进制数转换为十进制数,以便进行比较。
A选项:110的十进制数为(1×2^2 + 1×2^1 + 0×2^0) = 4 + 2 + 0 = 6
B选项:1010的十进制数为(1×2^3 + 0×2^2 + 1×2^1 + 0×2^0) = 8 + 0 + 2 + 0 = 10
C选项:1100的十进制数为(1×2^3 + 1×2^2 + 0×2^1 + 0×2^0) = 8 + 4 + 0 + 0 = 12
D选项:1001的十进制数为(1×2^3 + 0×2^2 + 0×2^1 + 1×2^0) = 8 + 0 + 0 + 1 = 9
因此,比较这四个十进制数,我们可以得出1100(即选项C)是最大的。
2、以下方法中,不是对文件读操作的是( )。
A readline()
B readlines()
C readtext()
D read()
解析:【喵呜刷题小喵解析】:在Python中,文件读操作通常使用`read()`, `readline()`, 和 `readlines()`方法。其中,`read()`方法读取整个文件的内容,`readline()`方法读取文件的一行,而`readlines()`方法读取文件的所有行并返回一个列表。`readtext()`并不是Python标准库中的文件读操作方法,因此选项C是对文件读操作不正确的描述。
3、以下选项,对random.uniform(a,b)语句表述正确的是( )。
A 随机生成一个a到b之间的整数
B 随机生成一个a到b之间的浮点数
C 随机生成一个a和b之外的整数
D 随机生成一个a和b之外的浮点数
解析:【喵呜刷题小喵解析】:random.uniform(a,b)是Python中的一个函数,用于生成一个介于a和b之间的浮点数(包括a和b)。因此,选项B“随机生成一个a到b之间的浮点数”是正确的。其他选项A、C和D都与random.uniform(a,b)函数的实际功能不符。
4、下列表达式在遍历字典d时,变量x代表字典值的是( )。
A for x in d:
B for x in d.keys():
C for x in d.items():
D for x in d.values():
解析:【喵呜刷题小喵解析】:在Python中,字典(dictionary)是一种可变容器模型,且可以存储任意类型对象。字典的每个键值对用冒号(:)连接,每个对本身用逗号(,)分隔。字典用大括号{}来表示。要遍历字典的值,可以使用for循环遍历字典的values()方法返回的值,此时变量x代表的就是字典的值。因此,选项D中的表达式“for x in d.values():”是正确的。选项A中的“for x in d:”实际上遍历的是字典的键,而不是值;选项B中的“for x in d.keys():”也是遍历字典的键;选项C中的“for x in d.items():”遍历的是字典的键值对,其中x是一个元组,包含键和值。
5、以下对turtle库中函数描述正确的是( )。
A goto() 函数设置当前画笔移动到原点位置
B pensize()函数设置画笔的移动速度
C setup()函数定义窗体的大小和相对位置
D hideturtle()函数是将海龟显示出来
解析:【喵呜刷题小喵解析】:在Python的turtle库中,A选项的goto()函数是设置当前画笔移动到指定的坐标位置,而不是原点位置,因此A选项错误。B选项的pensize()函数是用来设置画笔的线条宽度,而不是设置画笔的移动速度,因此B选项错误。C选项的setup()函数是用来定义窗体的大小和相对位置,因此C选项正确。D选项的hideturtle()函数是将海龟隐藏起来,而不是显示出来,因此D选项错误。
二、实操题
6、编程实现:
编写程序,统计1到N之间所有正整数中个位数为零的有几个。
例如:N=21,1到21之间所有正整数中个位数为零的数有2个,分别为:10,20。
输入描述:
输入一个正整数N
输出描述:
输出1到N之间(包含N)所有正整数中个位数为零的有几个
样例输入:
21
样例输出:
2
参考答案:br />```pythonN = int(input())count = 0for i in range(1, N+1):if i % 10 == 0:count += 1print(count)```
解析:【喵呜刷题小喵解析】
这个题目要求编写一个程序,统计1到N之间所有正整数中个位数为零的有几个。我们可以通过一个循环来遍历1到N之间的所有整数,检查每个整数的个位数是否为0。如果是,就将计数器加一。最后,输出计数器的值即可。
具体的Python代码实现如上所示。首先,我们通过`input()`函数获取用户输入的N值,并将其转换为整数类型。然后,我们定义一个计数器变量`count`,用于记录个位数为0的整数的数量。接着,我们使用一个for循环遍历1到N之间的所有整数,对于每个整数,我们检查其个位数是否为0。如果是,就将计数器加一。最后,我们输出计数器的值。
在Python中,检查一个整数的个位数是否为0,可以通过将该整数对10取模来实现。如果取模的结果为0,说明该整数的个位数为0。因此,在循环中,我们使用了条件语句`if i % 10 == 0`来检查每个整数的个位数是否为0。
7、编程实现:
输入多个英文单词(单词都为小写字母),然后按字典顺序排序输出 。
注:单词首字母相同时就比较第二个字母,以此类推。
输入描述:
输入多个由小写字母组成的英文单词,单词之间以一个英文逗号隔开
输出描述:
按字典顺序排序输出 ,且单词之间以一个英文逗号隔开
样例输入:
python,hello,world
样例输出:
hello,python,world
参考答案:br />```pythondef sort_words(input_str):words = input_str.split(',')words.sort()return ','.join(words)input_str = input("请输入多个英文单词,单词之间以一个英文逗号隔开:")print(sort_words(input_str))```
解析:【喵呜刷题小喵解析】
这个题目要求我们将输入的多个英文单词按照字典顺序排序后输出。首先,我们需要将输入的字符串按照逗号分割成单词列表,然后对列表进行排序,最后再将排序后的列表用逗号连接成字符串输出。
在Python中,我们可以使用`split()`函数将字符串按照指定的分隔符分割成列表,使用`sort()`函数对列表进行排序,使用`join()`函数将列表中的元素用指定的分隔符连接成字符串。
具体实现步骤如下:
1. 定义一个函数`sort_words()`,接收一个字符串参数`input_str`,表示输入的多个英文单词。
2. 在函数内部,使用`split()`函数将输入的字符串按照逗号分割成单词列表。
3. 使用`sort()`函数对单词列表进行排序。
4. 使用`join()`函数将排序后的单词列表用逗号连接成字符串,并返回该字符串。
5. 在主程序中,使用`input()`函数接收用户输入的多个英文单词,调用`sort_words()`函数对输入的单词进行排序,并输出排序后的结果。
需要注意的是,题目中要求单词首字母相同时比较第二个字母,以此类推。由于Python的`sort()`函数默认就是按照字典顺序进行排序的,因此我们可以直接使用`sort()`函数对单词列表进行排序,而不需要手动比较每个单词的每个字母。
8、编程实现:
小蓝和小青在玩积木搭建游戏,具体玩法如下:
小蓝报一个数字N,代表高楼的高度,小青则需要使用最少的积木搭建出高度大于N的高楼。
给出小蓝所报出的数字N,及已有积木块每一块的高度,请你帮助小青找出最少需要多少块积木可以搭建出高度大于N的高楼。
例如:N=12,已有4个积木块的高度分别为4,7,8,4。
则最少需要2块积木,可以使搭建的高楼高度大于12,2块积木为7和8。
输入描述:
第一行输入一个正整数N,表示小蓝报出的数字
第二行输入多个正整数,表示已有积木块每一块的高度,正整数之间以一个英文逗号隔开。(要求所有正整数之和大于N)
输出描述:
输出最少需要使用多少块积木,可以搭建出高度大于N的高楼
样例输入:
12 4,7,8,4
样例输出:
2
参考答案:br />输入一个正整数N,表示小蓝报出的数字,再输入多个正整数,表示已有积木块每一块的高度。我们需要找到最少需要使用的积木块数,使得搭建的高楼高度大于N。
解析:【喵呜刷题小喵解析】
这个问题可以通过贪心算法来解决。贪心算法是一种在每一步选择中都采取当前情况下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。
在这个问题中,我们可以按照积木块的高度从大到小进行排序,然后依次累加高度,直到累加的高度大于N。此时,我们需要的积木块数就是最少需要使用的积木块数。
具体的算法步骤如下:
1. 对所有积木块按照高度从大到小进行排序。
2. 初始化变量count为0,表示使用的积木块数。
3. 初始化变量sum为0,表示累加的高度。
4. 遍历所有积木块,对于每个积木块,将其高度加到sum上,如果sum大于N,就跳出循环。
5. 如果在遍历过程中没有跳出循环,那么count就是最少需要使用的积木块数。否则,count+1就是最少需要使用的积木块数。
最后,输出count即可。
在上面的例子中,N=12,已有4个积木块的高度分别为4,7,8,4。我们可以按照高度从大到小进行排序,得到7,8,4,4。然后,我们依次累加高度,得到7+8=15,此时累加的高度已经大于N,所以最少需要使用的积木块数为2。
9、编程实现:
N个小朋友围成一圈(N≤60),并按照顺序进行编号(编号1到N),然后从编号为1的小朋友开始持续报数,当报到的数字中含3或者数字是3的倍数的小朋友,不能报数字而是报“过”(例如3,6,13,31这些数字都报“过”)。
一次游戏中,小朋友们玩的不亦乐乎,突然有小朋友发现前边报过的数字中已经有报错的,而后边小朋友还在继续报数。请你帮助小朋友找出第一次报错的小朋友是编号几。
例如:有3个小朋友,编号为1,2,3。编号1的小朋友报1、编号2的小朋友报2、编号3的小朋友报“过”、编号1的小朋友报4、编号2的小朋友报5、编号3的小朋友报6、编号1的小朋友报7;此时第一次报错的小朋友为编号3。(因为编号3的小朋友应该报“过”时,报成了“6”,而“6”是3的倍数)
输入描述:
第一行输入一个正整数N,表示小朋友的人数
第二行输入一组有错的报数序列(“0”表示含3或者是3的倍数的数字),序列元素之间以一个英文逗号隔开
输出描述:
输出第一次报错的小朋友是编号几
样例输入:
3 1,2,0,4,5,6,7
样例输出:
3
参考答案:根据题目描述,我们需要找出第一次报错的小朋友编号。报错的情况是报数中含有3或者数字是3的倍数时,小朋友应该报“过”,但是报成了其他数字。首先,我们需要遍历输入的报数序列,找出报错的位置。由于报错的位置是在报数中含有3或者数字是3的倍数的位置,因此我们需要特别注意这些位置。在遍历的过程中,我们同时记录下当前小朋友的编号,当报错发生时,就输出该编号作为答案。具体的实现方法如下:1. 从报数序列的第二个元素开始遍历(因为第一个元素是1,不含有3或3的倍数)。2. 对于每个元素,判断是否为0(表示报错),如果是,则输出当前位置的编号,并结束程序。3. 如果不是0,则继续遍历下一个元素。
解析:【喵呜刷题小喵解析】:
根据题目描述,我们需要找出第一次报错的小朋友编号。报错的情况是报数中含有3或者数字是3的倍数时,小朋友应该报“过”,但是报成了其他数字。
这个问题可以通过遍历输入的报数序列来解决。在遍历的过程中,我们需要注意报数序列中每个元素的值,当遇到值为0的元素时,表示该位置的小朋友报错,此时我们可以输出该位置的编号作为答案。
由于报错的位置是在报数中含有3或者数字是3的倍数的位置,因此我们需要特别注意这些位置。在遍历的过程中,我们同时记录下当前小朋友的编号,当报错发生时,就输出该编号作为答案。
具体的实现方法如答案所示,需要注意的是,由于第一个元素是1,不含有3或3的倍数,因此我们从报数序列的第二个元素开始遍历。
因此,我们可以编写如下的程序来实现这个问题:
```python
N = int(input().strip())
report_sequence = input().strip().split(',')
for i in range(1, len(report_sequence)):
if report_sequence[i] == '0':
print(i + 1)
break
else:
print(-1)
```
程序首先读取输入的小朋友人数N和报数序列。然后从第二个元素开始遍历报数序列,如果当前元素为0,则表示该位置的小朋友报错,输出该位置的编号,并结束程序。如果遍历完整个报数序列都没有找到报错的位置,则输出-1表示没有报错的小朋友。
10、编程实现:
有N个正整数,现对N个正整数进行不同方式的排列,每次排列后都会按照以下规则进行一次计算,聪明的小蓝发现,排列方式不同,最后计算出的结果也不相同。
计算规则:
第一次:第一个数乘以第二个数乘以第三个数,结果记录为M(1);
第二次:第二个数乘以第三个数乘以第四个数,结果记录为M(2);
第三次:第三个数乘以第四个数乘以第五个数,结果记录为M(3);
…
第N-2次:第N-2个数乘以第N-1个数乘以第N个数,结果记录为M(N-2)。
最后计算M(1)+M(2)+M(3)......M(N-2)的数值。
找出一种排列方式使这个数值最大。
例如:N=4,4个正整数分别为1,2,3,4,那么排列方式就会有24种:
其中排列方式为1,3,4,2时,按照规则计算2次:1*3*4=12,3*4*2=24;乘积相加:12+24=36
这种排序方式是所有乘积相加的数值最大,为36。
输入描述:
输入N个正整数(3≤N),正整数之间一个英文逗号隔开
输出描述:
找出所有乘积相加的数值最大的排列方式,并输出数值
样例输入:
1,2,3,4
样例输出:
36
参考答案:```pythondef max_product_sum(numbers):n = len(numbers)# 使用动态规划的思想dp = [0] * ndp[0] = dp[1] = numbers[0]for i in range(1, n):for j in range(i):# 更新最大乘积dp[i] = max(dp[i], dp[j] * numbers[i])# 计算乘积和product_sum = 0for i in range(n-2):product_sum += dp[i] * dp[i+1]return product_sum# 输入样例numbers = list(map(int, input().split(',')))print(max_product_sum(numbers))```
解析:【喵呜刷题小喵解析】:
题目要求找到一种排列方式,使得所有乘积相加的结果最大。
一种思路是使用动态规划。定义一个长度为n的数组dp,其中dp[i]表示前i个数的最大乘积。初始时,dp[0]和dp[1]分别设为第一个数和第二个数。
对于每个i,我们遍历j从0到i-1,更新dp[i]为dp[j] * numbers[i]和dp[i]的较大值。这样,dp[i]就表示了前i个数的最大乘积。
最后,我们计算乘积和,即M(1)+M(2)+...+M(n-2),其中M(i)为dp[i] * dp[i+1]。
对于输入样例1,2,3,4,按照上述思路,可以得到最大乘积和的排列方式为1,2,4,3,乘积和为36。
11、编程实现:
有一块农田被划分为N*M块,农作物和杂草分布生长在农田中,其中农作物使用大写字母“R”表示,杂草使用大写字母“X”表示。请计算出农田中有几块独立的农作物区域(独立的农作物区域指该区域上下左右都被杂草围住,且N*M以外的区域都是杂草)。
例如:N=4,M=4,4*4的农田中农作物和杂草分布如下图:
这块4*4的农田中有3块独立的农作物区域(红色的3部分)。
输入描述:
第一行输入两个整数N和M(1≤N≤100,1≤M≤100),N表示农田的行数,M表示农田的列数,且两个正整数之间以一个英文逗号隔开
接下来的N行每行包括M个字符(字符只能为R或X),R表示农作物,X表示杂草,字符之间以一个英文逗号隔开
输出描述:
输出一个整数,表示N*M的农田中有几块独立的农作物区域
样例输入:
4,4 R,R,R,X R,X,R,X X,X,X,R R,X,X,X
样例输出:
3
参考答案:```pythondef count_crop_areas(n, m, grid):# 初始化一个二维数组,用于记录每个位置是否属于农作物区域is_crop_area = [[False] * m for _ in range(n)]# 遍历农田的每个位置for i in range(n):for j in range(m):# 如果当前位置是农作物if grid[i][j] == 'R':# 初始化一个队列,用于广度优先搜索queue = [(i, j)]is_crop_area[i][j] = True# 广度优先搜索while queue:x, y = queue.pop(0)# 上下左右四个方向for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:nx, ny = x + dx, y + dy# 判断新位置是否合法if 0 <= nx < n and 0 <= ny < m:# 如果新位置是杂草,则跳过if grid[nx][ny] == 'X':continue# 如果新位置没有被访问过,则将其加入队列if not is_crop_area[nx][ny]:is_crop_area[nx][ny] = Truequeue.append((nx, ny))# 统计农作物区域的数量crop_areas = 0for i in range(n):for j in range(m):if is_crop_area[i][j]:crop_areas += 1return crop_areas# 输入n, m = map(int, input().split(','))grid = [list(input().split(',')) for _ in range(n)]# 输出print(count_crop_areas(n, m, grid))```
解析:【喵呜刷题小喵解析】:
本题要求计算农田中有几块独立的农作物区域。可以使用广度优先搜索(BFS)算法来解决这个问题。
首先,初始化一个二维数组 `is_crop_area`,用于记录每个位置是否属于农作物区域。然后,遍历农田的每个位置,如果当前位置是农作物,则使用广度优先搜索来找到与其相连的所有农作物位置,并将这些位置标记为属于农作物区域。最后,统计农作物区域的数量并返回结果。
在广度优先搜索过程中,使用队列来存储待搜索的位置。从当前位置开始,依次向上下左右四个方向搜索,如果新位置是合法的(在农田范围内且是农作物),则将其加入队列,并将其标记为属于农作物区域。重复这个过程,直到队列为空,即搜索结束。
在搜索结束后,遍历 `is_crop_area` 数组,统计农作物区域的数量并返回结果。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!