版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年计算机类事业编考试编程题考试时间:______分钟总分:______分姓名:______第一题编写一个函数,接收一个正整数n作为参数,返回一个列表,列表中包含从1到n的所有奇数。要求使用列表推导式实现。第二题给定一个字符串s,编写一个函数,返回s中所有不同字符的列表。列表中的字符应按在原字符串中出现的顺序排列。例如,若s="hello",则函数返回['h','e','l','o']。第三题定义一个Python类`Rectangle`,表示矩形。该类应包含两个私有属性:`_width`(宽度)和`_height`(高度)。提供以下方法:1.一个初始化方法`__init__`,接收`width`和`height`作为参数,并初始化相应的属性。2.一个方法`get_area`,返回矩形的面积(宽*高)。3.一个方法`get_perimeter`,返回矩形周长(2*(宽+高))。4.一个方法`resize`,接收新的宽度和高度,更新矩形的宽度和高度属性。第四题使用栈(可以使用Python的列表模拟栈)实现一个简单的文本编辑器撤销功能。假设文本内容存储在一个字符串变量`current_text`中,栈用于存储历史状态。提供两个方法:1.`type_character(char)`:接收一个字符,将其追加到`current_text`的末尾,并将当前的`current_text`复制压入栈中。2.`undo()`:从栈中弹出最后一个状态,并将`current_text`更新为弹出的状态。如果栈为空,则不执行任何操作。要求在`undo`方法中处理栈为空的情况。第五题编写一个函数,接收一个整数列表`nums`和一个目标整数`target`作为参数。函数需要找出列表中和为`target`的两个数,并返回它们的索引组成的列表。假设每个输入都有且只有一个解,且不能重复使用同一个元素。例如,给定nums=[2,7,11,15],target=9,函数应返回[0,1],因为nums[0]+nums[1]=2+7=9。第六题实现一个算法,检查一个给定的链表是否是回文结构。链表节点定义如下:```pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=next```要求:不能使用额外的空间(除了几个用于变量存储的变量),时间复杂度尽量高。第七题假设有一个文件`data.txt`,其中每行包含一个整数。编写Python代码读取这个文件,并将所有读取到的整数累加起来,最后输出总和。要求处理文件可能不存在的情况,并输出相应的提示信息。第八题编写一个C/C++函数,接收一个指向整数数组的指针`arr`和一个整数`n`(数组的大小)。函数的功能是将数组中的元素按照从小到大的顺序进行排序。要求实现快速排序算法。第九题解释以下C/C++代码片段的执行结果,并说明其中指针和内存操作的相关细节。```c#include<stdio.h>intmain(){inta=10;intb=20;int*ptr1=&a;int*ptr2=&b;*ptr1=*ptr1+*ptr2;printf("a=%d,b=%d\n",a,b);ptr1=ptr2;//ptr1nowpointstob*ptr1=30;printf("a=%d,b=%d\n",a,b);return0;}```第十题写一个Python函数,接收一个字符串`s`作为参数。函数返回一个字典,字典的键是`s`中所有不重复的字符,值是该字符在`s`中出现的次数。例如,若`s="hello"`,则函数返回{'h':1,'e':1,'l':2,'o':1}。试卷答案第一题答案```pythondefodd_numbers(n):return[iforiinrange(1,n+1)ifi%2!=0]```解析思路使用列表推导式是Python中生成列表的简洁方式。`range(1,n+1)`生成从1到n的整数序列。`ifi%2!=0`是条件表达式,用于筛选出奇数。将条件表达式放在列表推导式的末尾,即可得到包含所有奇数的列表。第二题答案```pythondefunique_chars(s):seen=[]forcharins:ifcharnotinseen:seen.append(char)returnseen```解析思路要返回不同字符的列表并保持原顺序,可以使用一个辅助列表`seen`来记录已遇到的字符。遍历字符串`s`中的每个字符`char`,检查`char`是否已存在于`seen`列表中。如果不存在,则将其追加到`seen`列表末尾。最后返回`seen`列表,它包含了所有不同字符,且顺序与首次出现顺序一致。第三题答案```pythonclassRectangle:def__init__(self,width,height):self._width=widthself._height=heightdefget_area(self):returnself._width*self._heightdefget_perimeter(self):return2*(self._width+self._height)defresize(self,new_width,new_height):self._width=new_widthself._height=new_height```解析思路定义类`Rectangle`时,使用`_width`和`_height`作为私有属性(以单下划线开头表示约定)。`__init__`方法是初始化方法,用于在创建对象时设置宽度和高度。`get_area`方法通过返回`_width*_height`来计算面积。`get_perimeter`方法通过返回`2*(_width+_height)`来计算周长。`resize`方法接收新的宽度和高度,并更新对象内部的`_width`和`_height`属性,实现矩形的缩放。第四题答案```pythonclassTextEditor:def__init__(self):self.current_text=""self.history=[]deftype_character(self,char):self.history.append(self.current_text)#Savecurrentstateself.current_text+=chardefundo(self):ifself.history:self.current_text=self.history.pop()#Restorelaststate```解析思路定义`TextEditor`类,包含`current_text`字符串存储当前文本,`history`列表模拟栈用于存储历史状态。`type_character`方法在追加字符前,将当前的`current_text`复制并压入`history`栈中,然后执行追加操作。`undo`方法首先检查`history`栈是否为空。如果不为空,则使用`pop()`方法从栈顶弹出最后一个状态,并将其赋值给`current_text`,从而实现撤销操作。如果栈为空,则不执行任何操作。第五题答案```pythondeftwo_sum(nums,target):num_to_index={}fori,numinenumerate(nums):complement=target-numifcomplementinnum_to_index:return[num_to_index[complement],i]num_to_index[num]=ireturn[]#Nosolutionfound(thoughthepromptsaysalwaysonesolution)```解析思路使用哈希表(在Python中是字典)实现高效查找。创建一个空字典`num_to_index`。遍历列表`nums`,对于每个元素`num`及其索引`i`,计算`complement=target-num`。检查`complement`是否已经在`num_to_index`字典中作为键存在。如果存在,说明找到了一对数(`complement`和`num`)其和为`target`,直接返回这对数的索引`[num_to_index[complement],i]`。如果`complement`不在字典中,则将当前的`num`及其索引`i`添加到字典中,以便后续元素能利用它来查找。如果遍历结束仍未找到,根据题目假设返回空列表(尽管题目说明总有解)。第六题答案```pythondefis_palindrome(head):ifnotheadornothead.next:returnTrue#Step1:Findtheendofthefirsthalfslow=headfast=headwhilefast.nextandfast.next.next:slow=slow.nextfast=fast.next.next#Step2:Reversethesecondhalfprev=Nonecurrent=slow.nextwhilecurrent:next_node=current.nextcurrent.next=prevprev=currentcurrent=next_nodesecond_half=prev#Step3:Checkthefirsthalfandthereversedsecondhalffirst_half=headwhilesecond_half:iffirst_half.val!=second_half.val:returnFalsefirst_half=first_half.nextsecond_half=second_half.nextreturnTrue```解析思路这是一个经典的链表回文判断问题。首先,使用快慢指针找到链表的第一半部分的结束节点。慢指针`slow`移动一步,快指针`fast`移动两步,当`fast`到达末尾或接近末尾时,`slow`指向第一半部分的最后一个节点。然后,反转`slow`指针后面的第二半部分链表。接着,比较反转后的第二半部分链表和原始的第一半部分链表是否完全相同(逐个节点比较)。如果在任何位置比较发现值不相等,则链表不是回文。如果所有对应节点值都相等,则是回文。最后,可能需要恢复链表结构(本解法未展示)。第七题答案```pythondefsum_file(filename):try:total=0withopen(filename,'r')asfile:forlineinfile:try:number=int(line.strip())total+=numberexceptValueError:#Handlelinesthatarenotintegers,optionalpassprint(total)exceptFileNotFoundError:print("Error:Thefile'data.txt'doesnotexist.")```解析思路使用`try...except`块来处理潜在的错误。首先尝试`open`文件`filename`,模式为`'r'`(读取)。使用`with`语句确保文件正确关闭。读取文件时,逐行遍历。对于每一行,使用`line.strip()`去除首尾空白字符。尝试将行内容转换为整数`int(line.strip())`并累加到`total`变量中。如果某行无法转换为整数(例如空行或包含非数字字符),`ValueError`异常会被抛出,可以选择捕获该异常并忽略该行(如示例代码中`exceptValueError`块),或者根据需求处理。如果文件`filename`本身不存在,`FileNotFoundError`异常会被抛出,捕获该异常并输出提示信息。第八题答案```c#include<stdio.h>voidquick_sort(int*arr,intleft,intright){if(left>=right){return;//Basecase:arrayhas0or1element}//Choosepivot(hereusingtherightmostelement)intpivot=arr[right];inti=left-1;//Indexofsmallerelementfor(intj=left;j<right;j++){//Ifcurrentelementissmallerthanorequaltopivotif(arr[j]<=pivot){i++;//Incrementindexofsmallerelement//Swaparr[i]andarr[j]inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}}//Swaparr[i+1]andarr[right](orpivot)inttemp=arr[i+1];arr[i+1]=arr[right];arr[right]=temp;//Recursivelysortelementsbeforeandafterpartitionquick_sort(arr,left,i);quick_sort(arr,i+2,right);//Note:i+1isthepivot'sfinalposition}//Exampleusageintmain(){intarr[]={10,7,8,9,1,5};intn=sizeof(arr)/sizeof(arr[0]);quick_sort(arr,0,n-1);printf("Sortedarray:");for(inti=0;i<n;i++){printf("%d",arr[i]);}printf("\n");return0;}```解析思路快速排序是一种分治算法。`quick_sort`函数接收数组`arr`、左边界索引`left`和右边界索引`right`。递归的基本情况是当`left>=right`时,表示子数组只有一个或零个元素,已排序,直接返回。选择一个基准值`pivot`(示例中选用最右侧元素)。初始化一个索引`i`,用于追踪小于`pivot`的元素的边界。遍历`arr[left]`到`arr[right-1]`的元素,如果当前元素`arr[j]`小于或等于`pivot`,则将`i`加1,并交换`arr[i]`和`arr[j]`。遍历结束后,将`pivot`(即`arr[right]`)与`arr[i+1]`交换位置。这样,`pivot`将数组划分为两部分:左边的元素都小于`pivot`,右边的元素都大于`pivot`。然后,分别对`pivot`左边和右边的子数组(范围是`left`到`i`和`i+2`到`right`,注意`i+1`是`pivot`的最终位置)递归调用`quick_sort`函数进行排序。第九题答案```a=30,b=20a=30,b=20```解析思路1.`inta=10;intb=20;`:定义两个整型变量`a`和`b`,分别初始化为10和20。2.`int*ptr1=&a;`:定义一个指向整型的指针`ptr1`,并将其初始化为变量`a`的地址(`&a`是`a`的地址)。3.`int*ptr2=&b;`:定义另一个指向整型的指针`ptr2`,并将其初始化为变量`b`的地址(`&b`是`b`的地址)。4.`*ptr1=*ptr1+*ptr2;`:这是一个关键操作。`*ptr1`解引用`ptr1`指向的地址,即变量`a`,其值为10。`*ptr2`解引用`ptr2`指向的地址,即变量`b`,其值为20。`*ptr1+*ptr2`相当于`a+b`,即`10+20=30`。然后,`*ptr1=30;`将计算结果30赋值给`ptr1`指向的地址,也就是变量`a`。此时,变量`a`的值变为30,变量`b`的值仍为20。所以`printf("a=%d,b=%d\n",a,b);`输出`a=30,b=20`。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇科手术快速康复总结
- 2026年城市更新项目实施管理考试题库及答案
- 渗出性外伤治疗方案
- 医用氧气储存输送安全制度
- 电缆中间接头制作作业指导书
- 幼儿园膳食营养搭配管理制度
- 2026年招商引资项目落地服务考试试题及答案
- 2026年广西桂林市灌阳县乡镇事业单位招聘三支一扶大学生村官服务期满人员3人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年广西柳州市总工会招聘1人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年广西崇左市武德乡人民政府扶贫信息(档案)员招聘2人易考易错模拟试题(共500题)试卷后附参考答案
- 2026秋人教版小学美术四年级上册(新教材)教学计划附教学进度表
- 湖北省宜昌市枝江市2026年社区工作者招聘考试试卷-含答案解析
- 2026广西贺州市县级政府统计机构招聘统计协管员(协统员)32人备考题库附完整答案详解【历年真题】
- 2026年消防检测维保人员考试题(附答案)
- JJF(军工) 189-2018 超大规模集成电路老炼测试系统校准规范
- 2026年小学六年级数学毕业升学模拟试卷(人教版教材专用)
- 2026年秋季开学大学秋季开学家长会课件
- 2025年pcr北京市上岗证考试题及答案
- 伊春丰林县公安局招聘警务辅助人员笔试真题2025
- 2027年高考作文备考之10道二元思辨写作试题训练(学生版+教师版)
- 4.1《社会主要矛盾的变化》课件2026-2027学年统编版道德与法治九年级上册
评论
0/150
提交评论