一、单选题
1、高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。(2023-6-py四级)
A 编辑
B 保存
C 调试
D 编译
解析:【喵呜刷题小喵解析】:高级语言编写的程序需要经过编译操作,可以生成在计算机上运行的可执行代码。编译是将高级语言程序翻译成机器语言程序的过程,生成的可执行代码可以在计算机上直接运行。因此,选项D“编译”是正确答案。选项A“编辑”是指对程序进行编写和修改的过程,选项B“保存”是指将程序保存到计算机中的过程,选项C“调试”是指对程序进行错误检查和修正的过程,这些都不是生成可执行代码的必要步骤。
2、排序算法是稳定的(Stable Sorting),就是指排序算法可以保证,在待排序数据中有两个相等记录的关键字 R 和 S(R 出现在 S 之前),在排序后的列表中 R 也一定在 S 前。
下面关于排序稳定性的描述,正确的是()。
A 冒泡排序是不稳定的
B 插入排序是不稳定的
C 选择排序是不稳定的
D 以上都不正确
解析:【喵呜刷题小喵解析】:排序算法的稳定性是指,在待排序数据中有两个相等记录的关键字R和S(R出现在S之前),在排序后的列表中R也一定在S前。
冒泡排序、插入排序和选择排序都是基于元素之间的比较和交换来进行排序的。对于相等的元素,这些排序算法在排序过程中可能会改变它们的相对位置,因此它们都不是稳定的排序算法。
因此,选项D“以上都不正确”是正确的。
3、下面代码执行后输出是()。
A 12#20#220#220
B 20#10#220#220
C 20#10#30#220
D 10#20#30#220
解析:【喵呜刷题小喵解析】:题目中的代码没有给出,但从题目描述和选项来看,这应该是一个与进制转换或编码解码相关的题目。从选项来看,它们似乎是由某种编码方式得到的字符串。
首先,观察选项中的数字,它们似乎遵循某种规律。我们可以尝试将它们与ASCII码表进行对照,找出它们对应的字符。
- 选项A:12#20#220#220
- 12对应的ASCII字符是`L`
- 20对应的ASCII字符是`T`
- 220对应的ASCII字符是`Ü`(这是一个非标准ASCII字符,可能是特殊编码或错误)
- 220对应的ASCII字符是`Ü`(同样是非标准ASCII字符)
- 选项B:20#10#220#220
- 20对应的ASCII字符是`T`
- 10对应的ASCII字符是`\n`(换行符)
- 220对应的ASCII字符是`Ü`
- 220对应的ASCII字符是`Ü`
- 选项C:20#10#30#220
- 20对应的ASCII字符是`T`
- 10对应的ASCII字符是`\n`
- 30对应的ASCII字符是`0`(数字0)
- 220对应的ASCII字符是`Ü`
- 选项D:10#20#30#220
- 10对应的ASCII字符是`\n`
- 20对应的ASCII字符是`T`
- 30对应的ASCII字符是`0`
- 220对应的ASCII字符是`Ü`
从ASCII码表可以看出,`T`的ASCII值是20,`\n`(换行符)的ASCII值是10。因此,选项B中的字符串`20#10#220#220`可能表示的是字符串"T\nÜÜ"。
考虑到题目中的图片可能是一个干扰项,我们可以推测题目实际上是要我们解码某个字符串。如果我们将"T\nÜÜ"中的`#`替换为空格,得到"T ÜÜ",这可能是一个合理的答案。进一步观察,我们可以发现"T ÜÜ"与"20 10 220 220"在某种编码方式下是等价的。
因此,最有可能的答案是选项B。
4、下面代码执行后输出是()。
A 100, 110
B 110, 110
C 100, 100
D、 110, 100
解析:【喵呜刷题小喵解析】:题目中的代码是Python代码,使用了两个for循环来打印数字。外层循环控制列,内层循环控制行。外层循环从100开始,每次加1,内层循环从100开始,每次加10。因此,输出的数字组合是(100, 100),(100, 110),(110, 100),(110, 110)。所以,选项D是正确答案。
5、下面代码执行后输出是()。
A [1, 2, 3] [1, 2, 3]
B [1, 2, 3, 10] [1, 2, 3, 10]
C [1, 2, 3] [1, 2, 3, 10]
D [1, 2, 3, 10] None
解析:【喵呜刷题小喵解析】:根据题目中的代码,我们可以看到这是一个列表解析的题目。列表解析是Python中的一种简洁的创建列表的方式。代码中的列表解析是:
```python
[x for x in [1, 2, 3] if x != 10]
```
这个列表解析的意思是:对于列表 `[1, 2, 3]` 中的每一个元素 `x`,如果 `x` 不等于 `10`,就将 `x` 加入到新的列表中。因此,新的列表是 `[2, 3]`。
而第二个列表 `[1, 2, 3, 10]` 并没有进行列表解析,所以它的值保持不变。
所以,代码执行后的输出是:
```python
[2, 3] [1, 2, 3, 10]
```
与选项D匹配。
6、下面 Python 代码执行后输出是()。
A [1, 2, 3] [1, 2, 3]
B [1, 2, 3, 10] [1, 2, 3, 10]
C [1, 2, 3] [1, 2, 3, 10]
D [1, 2, 3, 10] None
解析:【喵呜刷题小喵解析】:根据题目中的Python代码,我们可以分析出代码的执行过程。
首先,代码定义了一个函数`f`,该函数接受一个列表`lst`作为参数,并返回一个新的列表,该列表是`lst`的复制,并在其末尾添加了一个元素10。
然后,代码调用了函数`f`两次,分别将列表`[1, 2, 3]`和`[4, 5, 6]`作为参数传入。
第一次调用`f([1, 2, 3])`后,返回了一个新的列表`[1, 2, 3, 10]`,这个列表被赋值给变量`a`。
第二次调用`f([4, 5, 6])`后,返回了一个新的列表`[4, 5, 6, 10]`,但是这个列表并没有被赋值给任何变量。
因此,代码执行后,变量`a`的值为`[1, 2, 3, 10]`,而变量`b`的值并未在代码中定义,所以它的值是不确定的。
所以,根据题目的选项,我们可以得出正确的答案是C选项,即`[1, 2, 3]`和`[1, 2, 3, 10]`。
7、下面 Python 代码所定义函数 AVG()的时间复杂度是()。
A O(1)
B、 O(n)
C、
O(n+4)
D、
O(n
解析:【喵呜刷题小喵解析】:该Python代码中的函数AVG()的时间复杂度主要取决于for循环的迭代次数。在for循环中,变量i从0遍历到n-1,所以循环体中的代码会执行n次。因此,该函数的时间复杂度为O(n)。选项B是正确的。
8、下面 Python 代码的功能是在 dictA 中保存形如{12:[1,2,3,4,6,12]}数据,即键为1-100 中的每个数,值为其对应的因数,横线处应填入代码是()。
A dictA.get(i,[]).append(j)
B、
dictA.get(i,list).append(j)
C、
dictA.get(i,list())+ (j)
D、 dictA.get(i,[])+[j]
解析:【喵呜刷题小喵解析】:题目要求是在 dictA 中保存形如{12:[1,2,3,4,6,12]}数据,即键为1-100 中的每个数,值为其对应的因数。
首先,我们需要理解 dictA.get(i,[]) 的作用。dictA.get(i,[]) 是获取字典 dictA 中键为 i 的值,如果该键不存在,就返回一个空列表 []。
然后,我们需要理解列表的 append 和 extend 方法。append 方法是将一个元素添加到列表的末尾,而 extend 方法是将一个列表的所有元素添加到另一个列表的末尾。
对于选项 A,dictA.get(i,[]).append(j) 的作用是将 j 添加到 dictA 中键为 i 的值的末尾,如果该键不存在,就创建一个空列表,然后将 j 添加到这个空列表的末尾,但是这样并不能保证每个键对应的值是一个列表,因为 append 方法只能添加单个元素,不能添加整个列表。
对于选项 B,dictA.get(i,list).append(j) 的作用是错误的,因为 list 不是一个有效的列表对象,它应该是一个变量名,如果之前已经定义过 list 变量,那么 dictA.get(i,list) 的作用就是将 list 变量的值作为默认值,这也不是我们想要的结果。
对于选项 C,dictA.get(i,list())+ (j) 的作用是错误的,因为 + 运算符不能用来连接一个列表和一个元素,它只能用来连接两个列表。
对于选项 D,dictA.get(i,[])+[j] 的作用是先获取 dictA 中键为 i 的值,如果该键不存在,就返回一个空列表 [],然后将 j 添加到这个列表的末尾,这样就可以保证每个键对应的值是一个列表,并且这个列表包含所有的因数。
因此,选项 D 是正确的。
9、下面 Python 代码中的 dictA 是 1-100 所有数及其对应的因数,此处仅列出其中一部分。
在横线处填上合适代码,实现只输出质数对应的因数()。
A itm for itm in dictA if len(itm) > 2
B、
K: V for K, V in dictA if len(V) > 2
C、 K: V for K, V in dictA.items() if len(V) > 2
D、
K: K.value for K in dictA if len(dictA[K]) > 2
解析:【喵呜刷题小喵解析】:
首先,我们需要明确题目要求,即找出dictA中质数对应的因数。
然后,我们分析每个选项:
A. `itm for itm in dictA if len(itm) > 2`
这个选项试图从dictA中筛选出长度大于2的元素,但dictA中的元素是键值对,而不是单个元素,因此这个选项是错误的。
B. `K: V for K, V in dictA if len(V) > 2`
这个选项尝试从dictA中筛选出值(因数列表)长度大于2的键值对。但是,题目要求找出质数对应的因数,而这个选项并没有对键(数字)进行质数判断,因此这个选项也是错误的。
C. `K: V for K, V in dictA.items() if len(V) > 2`
这个选项从dictA.items()中筛选出值(因数列表)长度大于2的键值对。同时,由于dictA的键是数字,因此这个选项可以间接地筛选出质数对应的因数。
D. `K: K.value for K in dictA if len(dictA[K]) > 2`
这个选项试图从dictA中筛选出键对应的值(因数列表)长度大于2的键值对,但dictA的键并不是对象,没有`.value`属性,因此这个选项是错误的。
因此,正确答案是C。这个选项从dictA.items()中筛选出值(因数列表)长度大于2的键值对,间接地筛选出了质数对应的因数。
10、要打开一个已经存在的文件并在末尾处续写新的内容,则打开模式应该设定为()。
A w
B w+
C r+
D a+
解析:【喵呜刷题小喵解析】:
要打开一个已经存在的文件并在末尾处续写新的内容,应使用“追加模式”来打开文件。在给出的选项中,只有选项D的“a+”是追加模式。因此,正确答案是D。
选项A的“w”是写入模式,会覆盖文件中的所有内容。
选项B的“w+”是读写模式,但同样会覆盖文件中的所有内容。
选项C的“r+”是读写模式,但主要用于读取文件内容,不能追加新的内容。
11、下列 Python 代码执行时如果输入 3.14,将输出的是()。
A 2#
B 1#4#
C 2#4#
D 2#3#4#
解析:【喵呜刷题小喵解析】根据题目给出的图片,图片中显示的是一段Python代码,代码的内容如下:
```python
num = float(input("请输入一个数字:"))
if num < 0:
print("1#")
elif num == 3.14:
print("2#")
else:
print("3#", num, "4#")
```
这段Python代码的作用是,用户输入一个数字,程序会根据用户输入的数字进行判断,并输出相应的结果。
题目要求当输入3.14时,将输出的内容是什么。根据代码逻辑,如果用户输入的数字是3.14,那么程序会执行elif语句,输出"2#"。因此,当输入3.14时,输出的内容是"2#4#",选项C是正确的。
12、有关下面 Python 代码的说法正确的是()。
A 如果输入 1.414,1.732,2.236 也将被执行,输出为 2
B 如果输入 1,2,3,4,5 将会因输入过多而报错
C 如果输入 1,2 也将会执行,输出 3
D 程序存在语法错误,原因是*_
解析:【喵呜刷题小喵解析】:根据提供的图片,我们可以观察到这是一个使用Python编写的代码片段。代码的主要功能是接受三个输入,然后执行一系列操作。
首先,代码中的`input()`函数是用来接收用户输入的,这里要求用户输入三个数字。`input()`函数将用户的输入转化为字符串,所以我们需要使用`split()`函数将输入的字符串按照逗号分割成一个列表。
接着,代码中使用了一个循环结构,它会依次遍历这个列表中的每一个元素,将每个元素转化为浮点数,然后执行后续的操作。
然后,代码中的`if`语句判断了每个输入值是否满足一定的条件,如果满足条件,则执行相应的操作。
最后,如果所有的输入都满足条件,代码将输出2。
所以,选项A是正确的,因为当输入1.414,1.732,2.236时,所有的输入都满足条件,输出为2。
选项B是错误的,因为代码并没有限制输入的个数,所以输入多个数字并不会报错。
选项C是错误的,因为当输入1,2时,第一个数字满足条件,第二个数字不满足条件,所以不会输出3。
选项D也是错误的,因为代码并没有语法错误。
13、下面 Python 代码程序用于复制图片文件,文件名仅为示例,文件位置假设正确,横线处分别应填入()。
A rb wb
B、
r w
C、 r+ w+
D、
a+ a+
解析:【喵呜刷题小喵解析】:在Python中,要复制文件,通常使用内置的`shutil`模块。但是,题目中给出的代码片段并没有使用`shutil`,而是使用了文件操作模式。在Python中,文件操作模式通常用于打开文件,如读取、写入等。
`r`表示只读模式,用于读取文件内容;`w`表示写入模式,用于写入文件内容,如果文件已存在,则会覆盖原有内容;`r+`表示读写模式,既可以读取文件内容,也可以写入文件内容;`a`表示追加模式,用于在文件末尾追加内容。
根据题目中的代码,横线处需要填入用于打开文件并复制内容的模式。由于需要读取源文件的内容并写入到目标文件,所以应该使用`r+`模式打开源文件,使用`w`模式打开目标文件。因此,选项C `r+ w+`是正确的。
另外,选项A `rb wb`中的`b`表示以二进制模式打开文件,这在复制图片文件时是有必要的,因为图片文件通常是二进制文件。但是,题目中并没有明确说明源文件和目标文件都是图片文件,所以选项A并不完全正确。选项B `r w`和选项D `a+ a+`都不符合题目要求,因为它们没有正确指定打开文件的模式。
14、在下面 Python 代码中,lst 数据如代码所示,但仅包含部分数据此处为示例。要求实现第 1 个按升序第 2 个数按降序,在横线处填上合适代码()。
A key = lambda x:(x[0],-x[1])
B lambda x:(x[0],x[1])
C key = lambda x:(-x[0],-x[1])
D、
不需要填入代码,按默认排序即可
解析:【喵呜刷题小喵解析】:题目要求实现第1个按升序第2个数按降序排序,因此需要使用一个自定义的排序键。在Python中,可以使用lambda函数来定义排序键。对于第1个元素升序排序,我们需要保持其原有顺序,即x[0];对于第2个元素降序排序,我们需要取反,即-x[1]。因此,合适的代码为`key = lambda x:(x[0],-x[1])`。选项A与此相符,故选A。
15、有关下面 Python 代码的说法,正确的是()。
A 函数 Fx()定义错误,交换 a 和 b 参数的先后顺序,程序执行后将输出 11
B 上述代码执行后将输出 2
C 上述代码执行后将输出 11
D 在 Fx()函数定义中,a 被定义为整数,因此传入字符串将导致错误,因此第 3 行函数调用后将报错
解析:【喵呜刷题小喵解析】:该段 Python 代码定义了一个函数 Fx(),接受两个参数 a 和 b,函数体内部交换了 a 和 b 的值,然后返回 b 的值。在函数定义外部,定义了一个变量 x 并赋值为 1,然后调用了函数 Fx(),将 x 和 2 作为参数传入。由于函数内部交换了参数的值,所以函数返回的是 2。因此,上述代码执行后将输出 2,选项 B 正确。选项 A 错误,因为函数定义没有错误,交换参数顺序也不会影响输出结果;选项 C 错误,因为函数返回的是 b 的值,而不是 11;选项 D 错误,因为函数定义中并没有指明 a 的数据类型,传入字符串不会导致错误。
二、判断题
16、域名是由一串用点分隔的名字来标识互联网上一个计算机或计算机组的名称,CCF 编程能力等级认证官方网站的域名是 gesp.ccf.org.cn,其中顶级域名是 gesp。(2023-6-py四级))
A 正确
B 错误
解析:【喵呜刷题小喵解析】:域名由一串用点分隔的名字组成,用于标识互联网上的计算机或计算机组。在题目中给出的域名gesp.ccf.org.cn中,最右侧的.cn是顶级域名,而gesp是二级域名。因此,题目中的陈述“顶级域名是gesp”是错误的。所以,正确答案是A,即题目中的陈述是错误的。
17、数列 1, 1, 2, 3, 5, 8 ... 是以意大利数学家列昂纳多·斐波那契命名的数列,从第三个数开始,每个数是前面两项之和。如果计算该数列的第 n 项(其中 n>3) fib(n),我们采用如下方法:① 令 fib(1)=fib(2)=1 ②用循环 for i=3 to n 分别计算 f(i) ③输出fib(n)。这体现了递推的编程思想。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:斐波那契数列的定义是从第三项开始,每个数是前面两项之和。题目中给出的算法也是基于这个定义,从第三项开始,通过循环计算每一项的值,这确实体现了递推的编程思想。因此,这个答案是正确的。
18、Python 列表的 sort()函数是稳定排序。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Python中,列表的sort()函数默认进行的是稳定排序。稳定排序是指,如果两个元素相等,它们在排序后的列表中的相对位置不会改变。因此,选项A是正确的。
19、冒泡排序算法额外空间需求是 O(1),即额外所需空间为常数,与排序数据的数量没有关系。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:冒泡排序算法虽然在进行排序的过程中,只需要常数级别的额外空间,但是在最坏的情况下,冒泡排序需要进行n-1次遍历,每次遍历都需要O(n)的时间,因此总的时间复杂度为O(n^2)。在遍历过程中,需要用到额外的空间来交换元素的位置,所以其额外空间需求并不是O(1),而是与排序数据的数量有关,因此该题目描述是错误的。
20、{1}+{1}在 Python 中是合法的表达式。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Python中,`{1}+{1}`不是一个合法的表达式。`{1}`和`{1}`中的大括号`{}`在Python中并没有特殊的含义,它们不会被当作是某种特殊的语法结构。因此,这个表达式会产生一个语法错误。如果你想表示数字1,应该直接写`1`,而不是`{1}`。所以,`1+1`才是合法的Python表达式。
21、下面 Python 代码执行后输出了文件 abc.txt 前 10 个字符,但由于没有关闭文件,可能存在风险。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:题目中提到的Python代码没有显示,因此无法直接判断其是否正确。然而,从题目描述来看,代码执行后输出了文件abc.txt的前10个字符,但没有关闭文件。在Python中,如果打开文件后没有关闭,可能会导致资源泄露,例如文件句柄未被释放,这在实际应用中是不推荐的。因此,如果代码没有正确地关闭文件,那么存在风险,所以选择B选项,即错误。如果提供的代码示例中有文件关闭操作,那么另当别论。
22、如下 Python 代码的第 1 行可被正常执行,该文件内容由中文英文和数字构成。程序执行后输出值与文件所占字节数相同。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:根据题目描述,给出的图片并未包含任何Python代码,因此无法判断其是否能被正常执行。此外,题目中提到的“程序执行后输出值与文件所占字节数相同”也缺乏上下文,无法判断其准确性。因此,无法确定该题目所描述的内容是否真实存在或合理。因此,选项B“错误”是正确答案。
23、在 Python 中,文本文件不可以二进制方式读写。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Python中,文本文件可以以二进制方式读写。通常,我们使用内置的`open()`函数以文本模式打开文件,但这并不意味着我们不能以二进制模式打开文件。使用`open()`函数的`rb`(二进制读)和`wb`(二进制写)模式,我们可以以二进制方式读写文件。这种方式在处理非文本文件(如图片、音频、视频等)时特别有用。因此,题目中的陈述是不正确的。
24、在与异常处理相关的关键字中,else 所属内容一定是不发生异常时才会被执行。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Python等编程语言中,`else`关键字通常与`if`语句一起使用,表示当`if`语句的条件不满足时,执行`else`后的代码块。然而,`else`语句块并不直接与异常处理相关。异常处理通常使用`try`、`except`和`finally`等关键字。`try`块中的代码可能会引发异常,而`except`块用于捕获这些异常。`finally`块中的代码无论是否发生异常都会被执行。因此,`else`并不属于与异常处理相关的关键字,其执行与否并不取决于是否发生异常。所以,题目的陈述是错误的。
25、根据下面 Python 函数定义,调用 Fx()函数时如果两个参数同为 int、float、tuple、list、str 都不会报错。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:根据题目中的函数定义,函数`Fx`接受两个参数,这两个参数可以是`int`、`float`、`tuple`、`list`或`str`类型。当调用`Fx()`函数时,只要传入的两个参数满足这些类型要求,就不会报错。因此,答案是正确的。
三、实操题
26、幸运数
【问题描述】
1. 变化正整数的各个奇数位(从右到左,个位为第 1 位,奇数,16347),变化的规则是乘以 7,如果该奇数位与 7 相乘的结果大于 9 则各位数相加,如相加结果仍然大于 9 则继续各位数相加,直到结果不大于 9;如果该奇数位与 7 相乘的结果不大于 9 则该数为该奇数位变化结果。偶数位不发生变化。各个奇数位变化完毕后,将新数的各位数相加,如果相加之和是 8 的整数倍,则为幸运数;
2. 例如 16347,第 1 位 7 奇数位,乘以 7 结果为 49,大于 9 各位数相加为 13 大于 9继续各位数相加最后结果为 4;然后变化第 3 位 3,第 5 位 1。最后变化结果为 76344,对于结果 76344 其各位数之和为 24,是 8 的倍数,为幸运数;
3. 首先输入 N,随后输入 N 行正整数。输出 N 行,对应 N 个正整数是否为幸运数,如是则输出 T 否则 F。
【输入描述】
1. 首先输入正整数 N 随后输入 N 行正整数,每个一个数。不考虑输入不合规情形,负数、负整数、非数字构成的字符串等。
2. 特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所有 input()函数不可有提示信息。
【输出描述】
1. 输出 N 行,对应 N 个正整数是否为幸运数,如是则输出 T 否则 F。;
2. 特别提示:注意输出字母为英文大写,小写或其他将判为错误。
【样例输入 1】
2
16347
76344
【样例输出 1】
T
F
参考答案:br />```pythonN = int(input())for _ in range(N):num = int(input())result = 0str_num = str(num)for i in range(len(str_num)):if i % 2 == 1:digit = int(str_num[i])digit_mul_7 = digit * 7if digit_mul_7 > 9:digit_mul_7_sum = 0while digit_mul_7 > 9:digit_mul_7_sum += digit_mul_7 % 10digit_mul_7 //= 10result += digit_mul_7_sumelse:result += digit_mul_7else:result += int(str_num[i])if result % 8 == 0:print("T")else:print("F")```
解析:【喵呜刷题小喵解析】
首先,我们需要读取输入的整数N,表示接下来要处理的整数的数量。
然后,对于每一个整数,我们需要按照题目描述的规则进行处理。
具体步骤如下:
1. 将输入的整数转换为字符串,方便我们按位处理。
2. 遍历字符串中的每一位,如果是奇数位(从右到左,个位为第1位,奇数位包括1,3,5,7等),则进行如下处理:
a. 将该位的数字乘以7,得到结果digit_mul_7。
b. 如果digit_mul_7大于9,则继续将digit_mul_7的每一位相加,直到结果不大于9,得到digit_mul_7_sum。
c. 如果digit_mul_7不大于9,则digit_mul_7_sum就是digit_mul_7。
d. 将digit_mul_7_sum加到结果变量result中。
3. 如果遍历的位是偶数位,则直接将该位的数字加到result中。
4. 最后,判断result是否是8的倍数,如果是,则输出"T",否则输出"F"。
这样,我们就可以根据题目的规则,判断每一个整数是否为幸运数了。
27、图像压缩
【问题描述】
1. 灰度图像有 256 级灰阶,编码 00-FF,对应 0-255,即图像有很多点,每个点取值是 00 到 FF。编程压缩到 16 级灰阶,对应 0-F。
2. 压缩规则:统计出每种灰阶的数量,取数量最多的前 16 种灰阶(如某种灰阶的数量与另外一种灰阶的数量相同,则以灰阶值从小到大为序),分别编号 0-F。其他灰阶转换到最近的 16 种灰阶之一,将某个点灰阶数与 16 种灰阶种的一种相减,绝对值最小即为最近。
3. 输入:多行数据,每行数据等长,每两个字符构成一个点,十六进制;输出:首先连续最多输出 16 种灰阶编码,不足 16 种灰阶就按实际输出;然后各行输出压缩后的编码,每行等长。
【输入描述】
1. 第 1 次输入正整数 n,表示有多少行数据。
2. 随后输入 n 行数据。
3. 特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所有 input()函数不可有提示信息。
【输出描述】
1. 首先输出 16 种灰阶编码,共计 32 个字符。不足 16 种按实际输出。输出数量最多的 16 种灰阶,从多到少;如某种灰阶的数量与另外一种灰阶的数量相同,则以灰阶值从小到大为序;
2. 特别提示:注意输出字母为大写,小写将判为错误,数本身与字母 T 和 F 之前没有空格。
【样例输入 1】
10 00FFCFAB00FFAC09071B5CCFAB76 00AFCBAB11FFAB09981D34CFAF56 01BFCEAB00FFAC0907F25FCFBA65 10FBCBAB11FFAB09981DF4CFCA67 00FFCBFB00FFAC0907A25CCFFC76 00FFCBAB1CFFCB09FC1AC4CFCF67 01FCCBAB00FFAC0F071A54CFBA65 10EFCBAB11FFAB09981B34CFCF67 01FFCBAB00FFAC0F071054CFAC76 1000CBAB11FFAB0A981B84CFCF66
【样例输出 1】
ABCFFF00CB09AC07101198011B6776FC 321032657CD10E 36409205ACC16D B41032657FD16D 8F409205ACF14D 324F326570D1FE 3240C245FC411D BF4032687CD16D 8F409205ACC11D B240326878D16E 83409205ACE11D
参考答案:```#include
解析:【喵呜刷题小喵解析】:
本题目要求将灰度图像从256级灰阶压缩到16级灰阶。压缩规则是先统计出每种灰阶的数量,取数量最多的前16种灰阶,分别编号0-F。其他灰阶转换到最近的16种灰阶之一,将某个点灰阶数与16种灰阶种的一种相减,绝对值最小即为最近。
首先,需要读入多行数据,每行数据等长,每两个字符构成一个点,十六进制。这里使用了`cin`来读入每行数据,并用`map`来统计每种灰阶的数量。
然后,统计出数量最多的前16种灰阶,分别编号0-F。这里使用了`map`的`rbegin`和`rend`函数来逆序遍历`map`,并用`lambda`表达式来比较灰阶的数量和灰阶值的大小。
接着,对于每行数据,需要将每个点压缩到最近的16种灰阶之一。这里使用了`map`的`find`函数来查找每个点的灰阶,如果找到了,就将其压缩到最近的16种灰阶之一,否则就将其压缩到00。
最后,输出压缩后的编码和16种灰阶编码。这里使用了`cout`来输出每行压缩后的编码和16种灰阶编码。
需要注意的是,输出字母为大写,数本身与字母T和F之前没有空格。这里使用了`to_string`函数来将数字转换为字符串,并指定了数字的范围和填充字符。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!