一、单选题
1、近年来,线上授课变得普遍,很多有助于改善教学效果的设备也逐渐流行,其中包括比较常用的手写板,那么它属于哪类设备?( )。
A 输入
B 输出
C 控制
D 记录
解析:【喵呜刷题小喵解析】:手写板是一种输入设备,它允许用户通过手写输入信息。在计算机系统中,设备通常被分为输入设备、输出设备和控制设备。输入设备用于向计算机输入信息,如键盘、鼠标、手写板等;输出设备用于从计算机输出信息,如显示器、打印机等;控制设备用于控制计算机的硬件操作,如调制解调器。因此,手写板属于输入设备,选项D“记录”虽然不准确,但可能是对输入设备的一种误解或混淆,因为输入设备不仅仅是“记录”设备,它们实际上是用于向计算机输入信息。所以,正确答案是D。
2、以下关于Python语言的描述,错误的是( )。
A Python提供了常用的数据结构,并支持面向对象编程
B Python是解释型语言
C Python是一种高级程序设计语言
D Python程序在运行前需要预先编译
解析:【喵呜刷题小喵解析】:Python是一种解释型语言,这意味着Python程序在运行前不需要预先编译,而是在运行时由Python解释器逐行解释并执行。因此,选项D“Python程序在运行前需要预先编译”是错误的描述。其他选项A、B和C都是正确的,Python确实提供了常用的数据结构,支持面向对象编程,并且是一种高级程序设计语言。
3、以下不属于面向对象程序设计语言的是( )。
A C++
B Python
C Java
D C
解析:【喵呜刷题小喵解析】:面向对象程序设计语言是一种编程范式,它使用对象来模拟现实世界中的概念。C++、Python和Java都是面向对象编程语言,它们支持面向对象的特性,如封装、继承和多态。然而,C是一种过程式编程语言,它主要基于函数和过程来组织代码,不支持面向对象编程的主要特性。因此,选项D中的C不属于面向对象程序设计语言。
4、下面有关Python类定义的说法,错误的是( )
A Python类实例化时,先执行new()和init()
B Python内置函数bool()对于自定义类有效,必须在新定义类中定义bool()函数
C Python自定义类不能适用于for-in循环
D Python自定义类可用getitem()魔术方法定义方括号运算符
解析:【喵呜刷题小喵解析】:在Python中,类实例化时,并没有`new()`方法,而是直接调用`__init__()`方法。因此,选项A的说法是错误的。Python内置函数`bool()`对于自定义类有效,但并不是必须在新定义类中定义`bool()`函数,Python会按照其规则对对象进行布尔判断。所以,选项B的说法也是错误的。Python自定义类可以适用于`for-in`循环,只要类定义了`__iter__()`方法。因此,选项C的说法是错误的。Python自定义类可用`__getitem__()`魔术方法定义方括号运算符,所以选项D的说法是正确的。因此,错误的说法是C。
5、有关下面Python代码的说法,错误的是 ( )。
A 最后一行代码将输出CBA
B 最后一行代码将不能输出CBA,因为没有定义print()函数
C 第3行代码的Data是strReverse类的数据属性
D 最后一行代码将自动执行init()函数
解析:【喵呜刷题小喵解析】:首先,根据题目给出的图片,代码应该是一个Python类定义,其中包含一个名为strReverse的类,该类有一个名为__init__的构造函数和一个名为reverse的方法。最后一行代码是strReverse的一个实例,名为Data。
对于选项A,最后一行代码将输出CBA,这是错误的。因为代码中并没有定义任何输出CBA的操作,最后一行代码只是创建了一个strReverse的实例,名为Data,并没有进行任何输出操作。
对于选项B,最后一行代码将不能输出CBA,因为没有定义print()函数,这是正确的。代码中并没有定义print()函数,也没有进行任何输出操作,所以最后一行代码不能输出CBA。
对于选项C,第3行代码的Data是strReverse类的数据属性,这是错误的。根据代码,Data是strReverse类的一个实例,而不是数据属性。
对于选项D,最后一行代码将自动执行init()函数,这是错误的。最后一行代码只是创建了一个strReverse的实例,并没有自动执行init()函数。init()函数是在创建类的实例时自动调用的,但在这个代码中并没有显示调用init()函数。
因此,选项B是正确的。
6、有关下面Python代码的说法,正确的是 ( )。
A 在倒数第2行代码中, a + Num(20) 将执行正确,而 Num(20).__add__(a) 将导致错误
B 由于类Num中没有定义加号运算符,所以倒数第2行代码中的 a + Num(20) 被执行时将导致错误
C 如果将倒数第2行代码中的 a.add(num(20)) 修改为 Num(20).add(a) 将导致错误,因为 Num(20) 不是一个对象,而a是类Num的对象
D 倒数第1行代码 print(a) 将被正确执行,虽然没有定义相关成员函数,或者称之为方法
解析:【喵呜刷题小喵解析】:在给出的Python代码中,定义了一个类Num,其中并没有定义`__add__`方法,即没有定义加法的行为。倒数第2行代码`a + Num(20)`会触发尝试调用`Num(20).__add__(a)`,但由于Num类中没有定义`__add__`方法,这会导致TypeError错误。因此,选项A和B都是错误的。
对于选项C,`a.add(Num(20))`和`Num(20).add(a)`在代码中没有给出,无法判断其正确性。
对于选项D,倒数第1行代码`print(a)`将会被执行,因为print是一个内置函数,它不需要类的特定方法就可以被调用。即使Num类中没有定义与print相关的成员函数或方法,这行代码仍然可以被正确执行。因此,选项D是正确的。
7、有关下面Python代码的说法,正确的是 ( )。
A manyData类可用于构造队列(queue)数据结构
B 在上面代码环境,代码 myData.__data.append(10) 可以增加10到 myData.__data 之中
C len()是Python内置函数,不适用于上面代码环境中的manyData
D 异常处理可以用于自定义类,因此manyData类的pop()函数执行可可以增加异常处理代码,否则可能导致异常
解析:【喵呜刷题小喵解析】:从题目中给出的图片信息来看,这是一个自定义的类`manyData`,其中定义了`__data`属性和`pop`方法。
A选项提到`manyData`类可用于构造队列(queue)数据结构,但题目中并没有提到`manyData`与队列有任何关系,因此A选项不正确。
B选项提到`myData.__data.append(10)`可以增加10到`myData.__data`之中,但题目中并没有提到`myData`,只有`manyData`,因此B选项也不正确。
C选项提到`len()`是Python内置函数,不适用于上面代码环境中的`manyData`。但实际上,`len()`函数在Python中是通用的,可以应用于任何可迭代对象,包括`manyData`类的`__data`属性,因此C选项不正确。
D选项提到异常处理可以用于自定义类,因此`manyData`类的`pop`函数执行可以增加异常处理代码,否则可能导致异常。这是正确的,因为`pop`方法如果没有检查`__data`是否为空,直接执行`__data.pop()`,确实可能导致`IndexError`异常。因此,D选项是正确的。
8、有关下面Python代码的说法,错误的是 ( )。
A moreData类可用于构造队列(queue)数据结构
B 代码倒数第2行连续push()用法将导致错误
C moreData可以认为是list类型的适配器,裁剪了list功能
D __data可以认为是moreData类的私有成员,只能在类内访问
解析:【喵呜刷题小喵解析】:从给出的图片中,我们可以看到`moreData`类似乎是一个包装了列表的类,它可能提供了一些额外的功能或限制。
A选项提到`moreData`类可用于构造队列(queue)数据结构,但图片中的代码并没有显示`moreData`类具有队列的特性,所以A选项是错误的。
B选项说代码倒数第2行连续`push()`用法将导致错误。从图片中我们可以看到,`moreData`类有一个`push()`方法,用于向内部列表添加元素。连续调用`push()`方法并不会导致错误,除非内部列表有特定的容量限制或其他条件。但图片中的代码并没有给出这些信息,所以我们无法确定这一点。
C选项说`moreData`可以认为是`list`类型的适配器,裁剪了`list`功能。从图片中我们可以看到,`moreData`类确实包装了一个列表,并提供了一些方法,如`push()`和`pop()`,但并未显示它裁剪了`list`的功能。
D选项说`__data`可以认为是`moreData`类的私有成员,只能在类内访问。从图片中我们可以看到,`__data`是一个私有属性,通常这种属性只能在类内部访问,所以D选项是正确的。
综上所述,A、C和D选项都有可能是正确的,但B选项没有足够的信息来支持其正确性。因此,B选项是错误的。
9、某内容仅会出现ABCDEFG,其对应的出现概率为0.40、0.30、0.15、0.05、0.04、0.03、0.03,如下图所示。
按照哈夫曼编码规则,假设B的编码为11,则D的编码为( B )。
A 10010
B 10011
C 10111
D 10001
解析:【喵呜刷题小喵解析】
哈夫曼编码是一种可变长度编码,根据字符出现的概率来分配编码。在哈夫曼编码中,概率越高的字符通常会被分配较短的编码,而概率较低的字符则会被分配较长的编码。
题目中给出了ABCDEFG的出现概率,并且指定了B的编码为11。为了找出D的编码,我们可以按照以下步骤推理:
1. 根据概率大小,从大到小构建哈夫曼树。由于题目中只涉及到7个字符,所以构建的哈夫曼树会是一个二叉树。
2. 根据哈夫曼树的构建规则,概率越高的字符离根节点越近。由于B的编码为11,且B的概率是0.30,是除了A(0.40)之外最大的,所以B在哈夫曼树中离根节点较近。
3. 由于D的概率是0.05,是除了A、B、C之外最小的,所以D在哈夫曼树中离根节点最远。
4. 根据哈夫曼树的编码规则,从根节点到D的路径上,从根节点到D经过的0和1的序列就是D的编码。由于B的编码为11,且B的概率大于D,所以D的编码一定在B的编码之后。
综合以上推理,我们可以得出D的编码为10111。因此,正确答案是C。
10、下面有关格雷码的说法,错误的是 ( )。
A 在格雷码中,任意两个相邻的代码只有一位二进制数不同
B 格雷码是一种唯一性编码
C 在格雷码中,最大数和最小数只有一位二进制数不同
D 格雷码是一种可靠性编码
解析:【喵呜刷题小喵解析】:格雷码(Gray Code)是一种二进制编码方式,它的特性是:对于任何两个相邻的代码,它们之间只有一位二进制数不同。这意味着,在格雷码中,每次只有一个位发生变化,这种特性在某些应用中特别有用,比如数字到模拟信号的转换。
A选项:在格雷码中,任意两个相邻的代码只有一位二进制数不同,这是格雷码的基本特性,因此A选项是正确的。
B选项:格雷码是一种唯一性编码,这也是正确的。由于任意两个相邻的代码只有一位不同,因此格雷码不会产生歧义,是一种唯一性编码。
C选项:在格雷码中,最大数和最小数只有一位二进制数不同。这个说法是错误的。在格雷码中,最大数和最小数可能有多位不同,而不是只有一位不同。
D选项:格雷码是一种可靠性编码,这也是正确的。由于格雷码的特性,它在某些应用中确实具有更高的可靠性。
因此,错误的选项是C。
11、有关下图的二叉树,说法正确的是( )。
A 既是完全二叉树也是满二叉树
B 既是二叉搜索树也是平衡二叉树
C 非平衡二叉树
D 以上说法都不正确
解析:【喵呜刷题小喵解析】:根据题目中的二叉树,我们可以观察到树中存在多个节点没有子节点,因此该树不是满二叉树。同时,由于该树并非每一层都完全填满,且节点的值也没有按照某种特定的顺序排列,因此它也不是完全二叉树或二叉搜索树。由于该树既不是满二叉树也不是完全二叉树,因此它也不是平衡二叉树。因此,以上说法都不正确,所以正确答案是D。
12、N个节点的二叉搜索树,其查找的平均时间复杂度为( )。
A O(1)
B O(N)
C O(logN)
D O(N2)
解析:【喵呜刷题小喵解析】:对于二叉搜索树,其查找的时间复杂度与树的深度有关。在二叉搜索树中,查找的过程是从根节点开始,如果根节点的值大于要查找的值,就在左子树中查找;如果根节点的值小于要查找的值,就在右子树中查找。由于每次查找都将节点数减半,所以查找的平均时间复杂度为O(logN)。因此,选项C是正确的。
13、青蛙每次能调1或2步。下面是青蛙跳到第N步台阶Python实现代码。该段代码采用的算法是( )。
A 递推算法
B 贪心算法
C 动态规划算法
D 分治算法
解析:【喵呜刷题小喵解析】:从题目中给出的Python代码可以看出,青蛙跳台阶的问题是一个典型的动态规划问题。动态规划算法是一种通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。在这个问题中,青蛙每次可以跳1步或2步,要跳到第N步,我们需要计算从第一步到第N步的所有可能跳法。动态规划算法通过保存子问题的解,避免了重复计算,提高了效率。因此,该段代码采用的算法是动态规划算法。
14、Python字典值查找的时间复杂度是( )。
A O(1)
B O(N)
C O(logN)
D O(N2)
解析:【喵呜刷题小喵解析】:在Python中,字典是一种基于哈希表的数据结构,它允许我们存储键值对。当我们查找字典中的值时,Python会利用哈希表的优势,通过键的哈希值来快速定位到对应的值。这个过程的时间复杂度是O(1),也就是说,查找字典中的值的时间复杂度与字典中元素的数量无关,总是常数时间。因此,选项A "O(1)" 是正确的。
15、下面有关Python的in运算符说法错误的是( )。
A 对于不同的数据类型,in运算符的时间复杂度不同
B 对于set和dict类型,in运算符的时间复杂度是O(1)
C 对于list和tuple类型,in运算符的时间复杂度是O(N)
D 对于Python的in运算符,其时间复杂度相同
解析:【喵呜刷题小喵解析】:在Python中,`in`运算符的时间复杂度并不是在所有数据类型中都相同的。对于`set`和`dict`类型,`in`运算符的时间复杂度是O(1),即常数时间复杂度。而对于`list`和`tuple`类型,`in`运算符的时间复杂度是O(N),即线性时间复杂度。因此,选项D的说法是错误的。选项A的说法“对于不同的数据类型,in运算符的时间复杂度不同”是正确的。
二、判断题
16、TCP/IP的传输层的两个不同的协议分别是UDP和TCP。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在TCP/IP协议中,传输层包含两个主要的协议,即用户数据报协议(UDP)和传输控制协议(TCP)。这两个协议为应用程序提供传输层服务,如数据分段、流量控制和错误检查等。因此,题目中的陈述是正确的。
17、5G网络中,5G中的G表示Gigabytes/s,其中 1 GB = 1024 MB。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:题目中的描述存在误解。在5G网络中,5G中的"G"并不代表Gigabytes/s(吉比特每秒),而是代表Generation(第五代移动通信技术)。因此,题目中的说法是错误的。
18、在面向对象中,类是对象的实例。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在面向对象编程中,类是对象的抽象描述,而对象是类的实例。类是对象的模板,定义了对象的属性和方法。因此,这个题目的陈述是错误的。
19、在Python类的定义中,可以有类属性和实例属性,类属性值被该类的对象共享。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Python中,类属性和实例属性是两种不同的属性类型。类属性是属于类的,不是属于某个特定对象的,因此它会被该类的所有对象共享。实例属性则是属于特定对象的,每个对象都有自己的实例属性。所以,题目中的描述“类属性值被该类的对象共享”是正确的。
20、在Python类的定义中,可以用魔术方法定义初始化函数或运算符函数等。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Python中,类的特殊方法(也称为魔术方法)允许你定义对象的行为,这些行为通常与Python的内置操作或特性相对应。例如,`__init__`是一个魔术方法,用于定义对象的初始化行为,这实际上是一个初始化函数。其他魔术方法还包括定义运算符行为的方法,如`__add__`,`__sub__`等。因此,题目的说法是正确的。
21、DFS是深度优先搜索算法的英文简写。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:深度优先搜索算法(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。这种算法会尽可能深地搜索图的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。因此,DFS是深度优先搜索算法的英文简写,选项A正确。
22、哈夫曼编码是一种有损压缩算法。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:哈夫曼编码是一种广泛使用的数据压缩算法,它属于无损压缩算法,能够在不损失原始数据的情况下,通过构造哈夫曼树来达到压缩数据的目的。因此,题目中的陈述是错误的。
23、Python本身并不支持指针和引用语法,因此有关链表等算法或数据结构在Python中不能实现。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:Python并不直接支持指针和引用语法,但是Python有对象和引用的概念。在Python中,所有值都是对象,每个对象都有一个唯一的标识(即其内存地址),并且可以通过引用(即变量)来访问这些对象。Python中的列表和字典等数据结构本质上都是基于引用实现的,因此它们的行为类似于链表或哈希表。因此,说Python不能实现链表等算法或数据结构是不准确的。实际上,Python有内建的集合类型(如list和tuple)可以用来实现链表或链表相关的算法。所以,这个陈述是错误的。
24、如果节点数为 ,广度搜索算法的最差时间复杂度为O(N)。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:广度搜索算法(如队列搜索)的最差时间复杂度为O(N),其中N是节点数。这是因为广度搜索需要遍历所有节点,因此时间复杂度与节点数成正比。所以,这个陈述是正确的。
25、二叉搜索树的左右子树也是二叉搜索树。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:二叉搜索树(Binary Search Tree)是一种特殊的二叉树,它的每个节点都有一个键值,对于树中的每个节点X,其左子树中所有节点的键值都小于X的键值,其右子树中所有节点的键值都大于X的键值。根据这个定义,二叉搜索树的左子树和右子树也必须满足二叉搜索树的性质,即它们的左右子树也必须是二叉搜索树。因此,题目的陈述是正确的。
三、实操题
26、小杨买饮料
时间限制:1.0 s
内存限制:128.0 MB
问题描述
小杨来到了一家商店,打算购买一些饮料。这家商店总共出售N种饮料,编号从0至N-1,其中编号为i的饮料售价ci元,容量li毫升。
小杨的需求有如下几点:
1. 小杨想要尽可能尝试不同种类的饮料,因此他希望每种饮料至多购买 1 瓶;
2. 小杨很渴,所以他想要购买总容量不低于L的饮料;
3. 小杨勤俭节约,所以在 1 和 2 的前提下,他希望使用尽可能少的费用。
方便起见,你只需要输出最少花费的费用即可。特别地,如果不能满足小杨的要求,则输出 no solution 。
输入描述
第一行两个整数N,L。
接下来N行,依次描述第i=0,1,...,N-1种饮料:每行两个整数ci,li。
输出描述
输出一行一个整数,表示最少需要花费多少钱,才能满足小杨的要求。特别地,如果不能满足要求,则输出 no
solution 。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1
5 100
100 2000
2 50
4 40
5 30
3 20
样例输出 1
9
样例解释 1
小杨可以购买1,2,4号饮料,总计获得50+40+20=110毫升饮料,花费2+4+3=9元。
如果只考虑前两项需求,小杨也可以购买1,2,4号饮料,它们的容量总和为50+30+20=100毫升,恰好可以满足需求。但遗憾的是,这个方案需要花费2+5+3=10元。
样例输入 2
5 141
100 2000
2 50
4 40
5 30
3 20
样例输出 2
100
样例解释 2
1,2,3,4号饮料总计140毫升,如每种饮料至多购买 1 瓶,则恰好无法满足需求,因此只能花费100元购买0号饮料。
样例输入 3
4 141
2 50
4 40
5 30
3 20
样例输出 3
no solution
数据规模
对于40%的测试点,保证N≤20 ;1≤L≤100 ;li≤100。
对于70%的测试点,保证li≤100。
对于所有测试点,保证1≤N≤500 ;1≤L≤2000 ;1≤ci,li≤106。
参考答案:对于小杨买饮料的问题,我们可以使用贪心算法来解决。首先,我们需要对饮料按照容量进行排序,然后从容量最大的饮料开始购买,直到总容量达到或超过L。在排序后的饮料列表中,我们优先购买价格较低的饮料,这样可以使得花费尽可能少。具体步骤如下:1. 首先,将饮料按照容量进行降序排序。2. 初始化变量total_cost为0,表示当前花费的费用。3. 初始化变量total_volume为0,表示当前购买的饮料总容量。4. 从容量最大的饮料开始,依次考虑购买每种饮料:* 如果当前购买的饮料容量加上total_volume小于L,则购买该饮料,并更新total_volume和total_cost。* 否则,停止购买饮料。5. 如果total_volume大于等于L,则输出total_cost,否则输出"no solution"。
解析:【喵呜刷题小喵解析】:
这个算法的思路是基于贪心策略,即每次选择当前最优的决策,希望最终得到全局最优解。在这个问题中,我们按照容量对饮料进行排序,然后从容量最大的饮料开始购买,这样可以尽可能快地满足小杨的容量需求。同时,我们优先购买价格较低的饮料,这样可以使得花费尽可能少。
这个算法的时间复杂度是O(NlogN),其中N是饮料的数量。这是因为我们需要对饮料按照容量进行排序,排序的时间复杂度是O(NlogN)。然后,我们遍历排序后的饮料列表,时间复杂度是O(N)。因此,总的时间复杂度是O(NlogN)。
这个算法的空间复杂度是O(N),因为我们需要存储排序后的饮料列表。
需要注意的是,这个算法并不能保证得到最优解,只能保证得到可行解。如果存在多个可行解,这个算法可能得到不同的解。如果要求得到最优解,可能需要使用更复杂的算法,比如动态规划或整数线性规划。
27、小杨的握手问题
时间限制:1.0 s
内存限制:128.0 MB
问题描述
小杨的班级里共有N名同学,学号从0至N-1。
某节课上,老师安排全班同学进行一次握手游戏,具体规则如下:老师安排了一个顺序,让全班N名同学依次进入教室。每位同学进入教室时,需要和已经在教室内且学号小于自己的同学握手。
现在,小杨想知道,整个班级总共会进行多少次握手。
提示:可以考虑使用归并排序进行降序排序,并在此过程中求解。
输入描述
输入包含2行。第一行一个整数N,表示同学的个数;第二行N个用单个空格隔开的整数,依次描述同学们进入教室的顺序,每个整数在0~N-1之间,表示该同学的学号。
保证每位同学会且只会进入教室一次。
输出描述
输出一行一个整数,表示全班握手的总次数。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1
4
2 1 3 0
样例输出 1
2
样例解释 1
2号同学进入教室,此时教室里没有其他同学。
1号同学进入教室,此时教室里有2号同学。1号同学的学号小于2号同学,因此他们之间不需要握手。
3号同学进入教室,此时教室里有1,2号同学。3号同学的学号比他们都大,因此3号同学需要分别和另外两位同学握手。
0号同学进入教室,此时教室里有1,2,3号同学。0号同学的学号比他们都小,因此0号同学不需要与其他同学握手。
综上所述全班一共握手0+0+2+0=2次。
样例输入 2
6
0 1 2 3 4 5
样例输出 2
15
样例解释 2
全班所有同学之间都会进行握手,因为每位同学来到教室时,都会发现他的学号是当前教室里最大的,所以他需要和教室里的每位其他同学进行握手。
数据规模
对于30%的测试点,保证N≤100。
对于所有测试点,保证2≤N≤3×105。
参考答案:```#include
解析:【喵呜刷题小喵解析】:
根据题目描述,我们可以发现,每次进入教室的同学,都需要和已经在教室中且学号小于自己的同学握手。因此,我们可以按照学号从大到小的顺序,依次计算每个同学需要握手的次数。
具体地,我们可以先读入所有同学的学号,并按照学号从大到小的顺序进行排序。然后,从第二个同学开始,每个同学都需要和前面的所有同学握手,因此我们可以计算1到i的累加和,即为前i个同学需要握手的总次数。
由于题目中给出的数据范围较大,因此我们需要使用long long类型来存储握手的总次数,以避免溢出。
最后,我们输出握手的总次数即可。
在代码中,我们使用了C++的STL库中的sort函数来进行排序,使用了vector来存储所有同学的学号。同时,我们使用了cin和cout来进行输入和输出。
需要注意的是,由于题目中给出的数据范围较大,因此我们需要使用long long类型来存储握手的总次数,以避免溢出。同时,我们还需要注意在输出时,需要使用endl来换行,以保证输出的格式正确。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!