北京理工大学计算机复试机试真题模拟卷(含详细答案)_第1页
北京理工大学计算机复试机试真题模拟卷(含详细答案)_第2页
北京理工大学计算机复试机试真题模拟卷(含详细答案)_第3页
北京理工大学计算机复试机试真题模拟卷(含详细答案)_第4页
北京理工大学计算机复试机试真题模拟卷(含详细答案)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京理工大学计算机复试机试真题模拟卷(含详细答案)考试说明1.考试时长:90分钟,满分100分2.编程语言:C/C++3.答题要求:代码可直接编译运行,输入输出格式严格匹配题目要求,禁止使用特殊库函数4.题型分布:基础编程题2道(30分)、经典算法题2道(40分)、综合应用题1道(30分)一、基础编程题(共2小题,每题15分,共30分)题目1:分段函数计算【题目描述】给定一个浮点数x,根据以下分段公式计算函数y的值,结果保留1位小数输出。y=-x+2.5(0≤x<2)y=2-1.5*(x-3)*(x-3)(2≤x<4)y=x/2-1.5(4≤x<6)【输入格式】输入一个浮点数x(0≤x<6)【输出格式】输出计算结果,保留1位小数【样例输入】1.5【样例输出】1.0【详细解题思路】本题核心是条件判断与浮点数运算,根据输入x的区间匹配对应计算公式。需要注意浮点数精度处理,输出时固定保留1位小数,避免整数输出缺失小数位。整体逻辑简单,用多分支判断即可实现。【完整代码】cpp

#include<iostream>

#include<iomanip>

usingnamespacestd;

intmain()

{

doublex,y;

cin>>x;

if(x>=0&&x<2)

{

y=-x+2.5;

}

elseif(x>=2&&x<4)

{

y=2-1.5*(x-3)*(x-3);

}

else

{

y=x/2-1.5;

}

//保留1位小数输出

cout<<fixed<<setprecision(1)<<y<<endl;

return0;

}题目2:最大公约数求解【题目描述】输入两个正整数,求解并输出两个数的最大公约数。【输入格式】一行输入两个正整数,用空格分隔【输出格式】输出一个整数,为两数的最大公约数【样例输入】2418【样例输出】6【详细解题思路】采用辗转相除法(欧几里得算法)求解,这是求解最大公约数的最优方法。核心原理:两个数的最大公约数,等于较小数和两数取余结果的最大公约数,循环迭代直到余数为0,此时的被除数即为最大公约数。相比暴力遍历,该算法效率更高。【完整代码】cpp

#include<iostream>

usingnamespacestd;

//辗转相除法求最大公约数

intgcd(inta,intb)

{

while(b!=0)

{

inttemp=a%b;

a=b;

b=temp;

}

returna;

}

intmain()

{

intm,n;

cin>>m>>n;

cout<<gcd(m,n)<<endl;

return0;

}二、经典算法题(共2小题,每题20分,共40分)题目3:围圈报数问题(约瑟夫环)【题目描述】有n个人围成一个圈,从第一个人开始依次报数,报到k的人出圈,下一个人继续从1报数,循环往复,直到圈内只剩最后一个人,输出最后留存的人的原始编号。多组测试用例输入。【输入格式】第一行输入测试组数T,接下来T行每行输入两个整数n、k(1≤n≤50,1≤k≤10)【输出格式】每组数据输出一行,为最后留存的编号【样例输入】25263【样例输出】31【详细解题思路】采用数组模拟环形链表的方式实现,适合题目给定的数据范围。用数组记录每个人的下一个编号,模拟出圈逻辑:每次数到k时,将该节点剔除,更新环形指向,不断循环,直到只剩一个节点。该方法直观易懂,是北理机试高频考点,适配小规模数据。【完整代码】cpp

#include<iostream>

#include<cstring>

usingnamespacestd;

constintN=55;

intne[N];//存储下一个人的编号

intmain()

{

intT;

cin>>T;

while(T--)

{

intn,k;

cin>>n>>k;

//初始化环形队列

for(inti=1;i<n;i++)

ne[i]=i+1;

ne[n]=1;

intcur=1;//当前起始位置

intpre=n;//当前位置的前一个位置

//剩余人数大于1时循环

while(n>1)

{

//报数k次

for(inti=1;i<k;i++)

{

pre=cur;

cur=ne[cur];

}

//剔除当前报到k的人

ne[pre]=ne[cur];

cur=ne[pre];

n--;

}

cout<<cur<<endl;

}

return0;

}题目4:字符串组合匹配【题目描述】输入三个字符串s1、s2、s3,判断s3是否可以由s1和s2重复拼接组合而成。若可以,输出两个整数,分别代表s1、s2的使用次数;若无法组合,输出FALSE。【输入格式】一行输入三个无空格字符串【输出格式】可行则输出两个正整数,空格分隔;不可行输出FALSE【样例输入1】aabbbbaaaabbaa【样例输出1】32【样例输入2】abbaabbaaabaab【样例输出2】FALSE【详细解题思路】核心思路:遍历所有可能的s1、s2使用次数,拼接后与s3比对。首先根据字符串长度确定遍历范围,设s1长度len1,s2长度len2,s3长度len3,遍历i(s1次数)、j(s2次数),满足i*len1+j*len2=len3,拼接i个s1和j个s2,比对是否与s3完全一致。找到合法解直接输出,遍历结束无匹配则输出FALSE。【完整代码】cpp

#include<iostream>

#include<string>

usingnamespacestd;

intmain()

{

strings1,s2,s3;

cin>>s1>>s2>>s3;

intlen1=s1.size();

intlen2=s2.size();

intlen3=s3.size();

boolflag=false;

//遍历所有可能的次数,范围可控

for(inti=0;i*len1<=len3;i++)

{

for(intj=0;j*len2<=len3;j++)

{

if(i*len1+j*len2!=len3)

continue;

//拼接字符串

stringtemp="";

for(inta=0;a<i;a++)temp+=s1;

for(intb=0;b<j;b++)temp+=s2;

if(temp==s3&&(i>0||j>0))

{

cout<<i<<""<<j<<endl;

flag=true;

return0;

}

}

}

if(!flag)

cout<<"FALSE"<<endl;

return0;

}三、综合应用题(1小题,30分)题目5:学生信息排序系统【题目描述】输入n个学生的信息,包含学号、姓名、成绩三个字段。要求按照成绩从高到低排序,成绩相同则按学号从小到大排序,最终输出排序后的所有学生信息。【输入格式】第一行输入整数n(1≤n≤30),代表学生人数接下来n行,每行输入学号(整数)、姓名(无空格字符串)、成绩(整数)【输出格式】按排序规则逐行输出学生信息,字段之间空格分隔,每行一条学生数据【样例输入】3202402Zhang88202401Li92202403Wang88【样例输出】202401Li92202402Zhang88202403Wang88【详细解题思路】1.自定义结构体存储学生学号、姓名、成绩信息,规整数据结构;2.编写自定义排序函数,优先级:优先成绩降序,成绩一致则学号升序;3.读取所有学生数据存入数组,调用sort函数完成排序;4.遍历数组,按格式输出排序后的信息。本题考察结构体使用、自定义排序,是北理机试综合题高频题型,重点考察代码规范性和逻辑完整性。【完整代码】cpp

#include<iostream>

#include<algorithm>

#include<string>

usingnamespacestd;

//定义学生结构体

structStudent

{

intid;

stringname;

intscore;

};

//自定义排序规则

boolcmp(Studenta,Studentb)

{

//成绩高的在前

if(a.score!=b.score)

returna.score>b.score;

//成绩相同,学号小的在前

returna.id<b.id;

}

intmain()

{

intn;

cin>>n;

Studentstu[35];

//读取学生信息

for(inti=0;i<n;i++)

{

cin>>stu[i].id>>stu[i].name>>stu[i].score;

}

//排序

sort(stu,stu+n,cmp);

//输出结果

for(inti=0;i<n;i++)

{

cout<<stu[i].id<<""<<st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论