北航计算机复试机试真题及详细答案(经典完整版)_第1页
北航计算机复试机试真题及详细答案(经典完整版)_第2页
北航计算机复试机试真题及详细答案(经典完整版)_第3页
北航计算机复试机试真题及详细答案(经典完整版)_第4页
北航计算机复试机试真题及详细答案(经典完整版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

北航计算机复试机试真题及详细答案(经典完整版)适用场景:北航计算机考研复试、保研机试;考试环境:C/C++语言,限时1000ms,内存256MB;试题难度贴合历年机考梯度,包含基础模拟、排序遍历、数据结构应用三类核心题型,为考场高频原题。第一题:真分数约分(25分·基础送分题)题目描述输入两个正整数,分别代表一个真分数的分子和分母,保证输入合法(分子小于分母、无多余0、均为正整数)。请对该分数进行约分,输出约分后的最简分子和分母,两个数字中间用空格分隔。输入输出样例输入:1218输出:23输入:525输出:15解题思路本题核心考点为最大公约数(GCD)求解,是北航机试必考基础题型。最简分数的求解本质是将分子、分母同时除以二者的最大公约数。采用辗转相除法(欧几里得算法)计算最大公约数,算法简洁、效率高,适配所有正整数输入场景。整体流程:输入分子分母→求最大公约数→分子分母分别整除公约数→输出结果。完整代码c++

#include<stdio.h>

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

intgcd(inta,intb)

{

while(b!=0)

{

inttemp=a%b;

a=b;

b=temp;

}

returna;

}

intmain()

{

intnumer,deno;

scanf("%d%d",&numer,&deno);

intres=gcd(numer,deno);

//约分输出

printf("%d%d\n",numer/res,deno/res);

return0;

}答案解析1.辗转相除法原理:两个正整数的最大公约数,等于其中较小的数和两数取模结果的最大公约数,循环至余数为0,此时的被除数即为最大公约数。2.样例1解析:12和18的最大公约数为6,12/6=2,18/6=3,输出最简分数2/3。3.代码适配性:可处理所有合法真分数输入,无数值溢出问题,完全满足机考时间、内存限制。第二题:科学计数法转换(35分·中档模拟题)题目描述输入一个合法正数(输入无首尾多余0,可能是小数、整数),将其转换为标准科学计数法格式输出。输出规则:有效数字保留整数位为1-9的单个整数,后续小数位全部保留,格式为【数字e±指数】。转换规则1.大于等于10的数:小数点向左移动,移动位数为正指数;2.小于1的小数:小数点向右移动,移动位数为负指数;3.有效数字首位必须为1-9,无多余末尾0。输入输出样例输入:0.000002输出:2e-6输入:123.456输出:1.23456e2输入:9870输出:9.87e3解题思路本题考察字符串处理与数值规则模拟,是北航机试高频中档题。直接用浮点型变量存储易出现精度丢失,因此采用字符串遍历处理。核心流程:读取数字字符串→定位首个非0有效数字→统计小数点移动位数(指数)→拼接标准科学计数法格式。完整代码c++

#include<stdio.h>

#include<string.h>

intmain()

{

chars[100];

scanf("%s",s);

intlen=strlen(s);

intpos=0;

//找到第一个非0字符

while(pos<len&&s[pos]=='0')pos++;

intexp=0;

charres[100]={0};

intidx=0;

//处理小于1的小数(带小数点)

if(s[0]=='0'&&pos<len&&s[pos]!='.')

{

exp=-(pos-1);

res[idx++]=s[pos];

res[idx++]='.';

//拼接后续所有有效数字

for(inti=pos+1;i<len;i++)

{

if(s[i]!='.')res[idx++]=s[i];

}

}

else//处理大于等于1的数

{

//查找小数点位置

intdot=len;

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

{

if(s[i]=='.')

{

dot=i;

break;

}

}

exp=dot-1;

res[idx++]=s[0];

res[idx++]='.';

//拼接后续所有数字

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

{

if(s[i]!='.')res[idx++]=s[i];

}

}

//去除末尾多余的0和多余小数点

while(idx>0&&res[idx-1]=='0')idx--;

if(idx>0&&res[idx-1]=='.')idx--;

res[idx]='\0';

printf("%se%d\n",res,exp);

return0;

}答案解析1.精度保障:全程字符串操作,规避double、float类型的精度丢失问题,适配超长数字输入;2.指数计算逻辑:纯小数首个有效数字前的0的个数为负指数绝对值;大于1的数字,整数位位数减1为正指数;3.格式优化:自动剔除结果末尾无效0、多余小数点,完全贴合题目输出规范。第三题:登机口排序与重排(40分·压轴数据结构题)题目描述机场登机口按树形层级排列,给定若干登机口编号及对应旅客流量,需要按照规则调整登机口位置。输入格式第一行输入整数n,代表登机口数量;第二行输入n个整数,依次对应编号连续的登机口流量(默认登机口编号从1开始递增)。调整规则1.优先级排序:先按旅客流量从大到小排序,流量相同则按登机口编号从小到大排序;2.位置重排:将排序后的登机口,按树形结构从上到下、从左到右的层级顺序,依次重新分配编号;3.输出要求:逐行输出原编号新编号,保持输出顺序为排序后的登机口顺序。输入输出样例输入:4200100200150对应关系:1号(200)、2号(100)、3号(200)、4号(150)输出:11324324解题思路本题考察结构体排序、自定义排序规则、序列重映射,是北航保研、考研机试经典压轴题。整体流程:1.定义结构体存储登机口原编号、流量;2.编写自定义排序函数,实现流量降序、编号升序的排序规则;3.遍历排序后的序列,依次分配1、2、3...新编号;4.按顺序输出原编号和新编号。完整代码c++

#include<stdio.h>

#include<algorithm>

usingnamespacestd;

//定义登机口结构体:存储原编号、流量

structGate

{

intid;

intflow;

}gate[1005];

//自定义排序规则

boolcmp(Gatea,Gateb)

{

//流量不同:流量大的在前

if(a.flow!=b.flow)

returna.flow>b.flow;

//流量相同:编号小的在前

returna.id<b.id;

}

intmain()

{

intn;

scanf("%d",&n);

//录入数据,编号从1开始

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

{

gate[i].id=i;

scanf("%d",&gate[i].flow);

}

//按规则排序

sort(gate+1,gate+n+1,cmp);

//依次分配新编号并输出

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

{

printf("%d%d\n",gate[i].id,i);

}

return0;

}答案解析1.排序逻辑验证:样例中1号、3号流量均为200(最大),因1号编号更小,排在最前;其次是4号(150),最后是2号(100),与样例输出一致;2.重难点:自定义比较函数是核心,必须严格遵循“流量优先降序、同流量编号升序”的考场规则,排序逻辑错误会直接失分;3.复杂度说明:采用标准sort排序,时间

温馨提示

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

评论

0/150

提交评论