博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2014北邮计算机考研复试上机题解(上午+下午)
阅读量:5061 次
发布时间:2019-06-12

本文共 9118 字,大约阅读时间需要 30 分钟。

据江湖传闻,2014年计算机机试分为了上午、下午两批。

先来看上午的题目。

A.众数-计算机一2014

题目地址:

直接统计就可以。

AC代码:

#include
#include
using namespace std;int a[105];int main(){ int tes; int n,i; while(~scanf("%d",&tes)) { while(tes--) { scanf("%d",&n); for(i=0; i
ans) { ans=cnt; res=a[i-1]; } cnt=1; } else cnt++; } if(cnt>ans) //最后一个数还没推断 { ans=cnt; res=a[i-1]; } printf("%d\n",res); } } return 0;}/*241 1 1 251 1 2 2 3*/

B. 旋转图像-计算机一2014

题目地址:

解题思路:

我们能够简化思路,写一个旋转90度的函数。假设选择180度则运行两次,270度。则运行三次。。

PS:记得交换m,n。

AC代码:

#include
#include
using namespace std;char a[55][55];char b[55][55];int m,n;void rotate(){ int i,j; for(i=0; i

C. 网络的核-计算机一2014

题目地址:

解题思路:

这题的思路就是先用floyd求出随意两点的最短距离。然后看哪个点事要求的点。

PS:记得floyd的顺序是k,i,j。表示初试的时候大题i,j,k顺序写错了。。

AC代码:

#include
#include
#define maxn 55using namespace std;int m,n;int dis[maxn][maxn];void floyd() //floyd的顺序k,i,j { int i,j,k; for(k=1; k<=n; k++) for(i=1; i<=n; i++) for(j=1; j<=n; j++) { if(dis[i][j]>dis[i][k]+dis[k][j]) dis[i][j]=dis[i][k]+dis[k][j]; }}int main(){ int tes; int i,j; while(~scanf("%d",&tes)) { while(tes--) { scanf("%d%d",&n,&m); for(i=1; i<=n; i++) //初试化 { for(j=1; j<=n; j++) dis[i][j]=n; dis[i][i]=0; } int a,b; for(i=0; i

D. Python List-计算机一2014

题目地址:

解题思路:

先分析题目大意。总共同拥有四种操作。

a=[]

a.sort()

a.append(int)

a.[int]

用一个map将list的名字和数组下标相应,然后分析每一个操作。详见代码。

AC代码:

#include
#include
#include
#include
#define maxn 105using namespace std;int a[maxn][maxn]; //a[t]表示list映射到t的数组int len[maxn]; //len[t]表示list映射到t的长度map
mq;int main(){ int tes,n,i,j; char str[maxn]; char nam[maxn]; while(~scanf("%d",&tes)) { while(tes--) { scanf("%d",&n); mq.clear(); memset(len,0,sizeof(len)); int t=0,x; int l; while(n--) { scanf("%s",str); l=strlen(str); if(str[l-1]==']') { if(str[l-2]=='[') //.[] { for(i=0; i
a[x][j]) { tmp=a[x][i]; a[x][i]=a[x][j]; a[x][j]=tmp; } } } } else { for(i=0; i

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

再来看看的题目。

A. 中位数-计算机二2014

题目地址:

解题思路:

n分奇数和偶数讨论,

假设是奇数,直接输出下标为(n/2+1)就可以(我是下标从1開始的)

假设是偶数,输出n/2与n/2+1和的一半就可以。只是因为输出时要控制不要末尾的0。因为数组里都是int,能够把结果放大10倍,假设能够被10整除。输出int就可以。否则输出一位小数(仅仅能是.5)

AC代码:

#include
#include
#include
#include
#define maxn 105using namespace std;int a[maxn];int main(){ int tes,n,i; while(~scanf("%d",&tes)) { while(tes--) { scanf("%d",&n); for(i=1; i<=n; i++) scanf("%d",&a[i]); if(n%2==1) printf("%d\n",a[n/2+1]); else { int t = ((double(a[n/2])+a[n/2+1])/2)*10; //把结果放大10倍 if(t%10==0) printf("%d\n",t/10); else printf("%.1f\n",double(t)/10); } } } return 0;}/*241 1 2 251 1 2 2 3*/

B. 内存分配-网妍14-计算机二14

题目地址:

解题思路:

因为是最佳适应。能够把最開始的内存依照从小到大排序。然后设立一个vis訪问数组。

每次新来一个就从从开头遍历这个数组,找到第一个>=这个值,而且vis为0(未使用)的。然后把vis置1。详见代码

AC代码:

#include
#include
#include
#include
#define maxn 105using namespace std;int a[maxn];int vis[maxn];int main(){ int tes,n,m,i,j; while(~scanf("%d",&tes)) { while(tes--) { scanf("%d",&n); for(i=0; i
0) printf(" "); flag=0; scanf("%d",&d); for(i=0; i
=d&&!vis[i]) //找到第一个>=d而且未使用的 { vis[i]=1; printf("%d",a[i]); flag=1; break; } } if(!flag) //没找到,输出NULL printf("NULL"); } printf("\n"); } } return 0;}/*247 5 10 324 643 5 9 1035 12 6*/

C. 图像识别-计算机二2014

题目地址:

解题思路:

这个就是个dfs的题目,从一个点出发。能够把他周围的八个方向的点满足条件的都遍历了。假设能够他们就是一类。继续搜。

AC代码:

#include
#include
#include
#include
#define maxn 105using namespace std;int m,n,d;int a[maxn][maxn];int vis[maxn][maxn];int dir[8][2]= {
{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; //八个方向int ab(int p){ if(p<0) p=0-p; return p;}void dfs(int x,int y){ int i,cx,cy; for(i=0; i<8; i++) { cx=x+dir[i][0]; cy=y+dir[i][1]; if(cx>=0&&cx
=0&&cy
<=d) //满足条件的点 { vis[cx][cy]=1; dfs(cx,cy); } } return;}int main(){ int tes,i,j; while(~scanf("%d",&tes)) { while(tes--) { scanf("%d%d%d",&m,&n,&d); for(i=0; i

D. 汇编-计算机二2014

题目地址:

解题思路:

先分析题目大意。总共同拥有两种操作。

ADD

MOV

逗号之前是AX,AL,AH这个分三类讨论。我把AX,BX,CX,DX的值存到了一个数组里。

分别相应a[0,1,2,3]

这样方便处理。

逗号之后须要分情况讨论,一种是AX,AL,AH这样的。另一种就是二进制,十六进制,十进制的数这样的。把这个结果保存到tmp就可以。详见代码。

AC代码:

#include
#include
#include
#include
#define maxn 105using namespace std;int m,n,d;int a[4];char str[maxn];char op[maxn];int main(){ int tes,n,i; while(~scanf("%d",&tes)) { while(tes--) { scanf("%d",&n); memset(a,0,sizeof(a)); while(n--) { scanf("%s",op); scanf("%s",str); int len=strlen(str); int t=str[0]-'A'; int tmp=0; if(str[len-1]=='X'||str[len-1]=='L'||(str[len-1]=='H'&&str[3]!='0')) { //
逗号之后的数假设是AX,AL,AH之类的 int t2=str[len-2]-'A'; if(str[len-1]=='X') tmp=a[t2]; else if(str[len-1]=='L') tmp=a[t2]%256; else tmp=a[t2]/256; } else //逗号之后的数假设是二进制,十进制。十六进制的 { int d; if(str[len-1]=='H') //十六进制 d=16; else if(str[len-1]=='B') //二进制 d=2; else //十进制 { len++; d=10; } int x; for(i=3; i
='0'&&str[i]<='9') x=str[i]-'0'; else x=str[i]-'A'+10; tmp=tmp*d+x; } } if(strcmp(op,"MOV")==0) //假设是MOV { if(str[1]=='X') a[t]=tmp; else if(str[1]=='L') a[t]=a[t]/256*256+tmp; else a[t]=a[t]%256+tmp*256; } else //假设是ADD { if(str[1]=='X') a[t]+=tmp; else if(str[1]=='L') a[t]+=tmp; else a[t]=a[t]+tmp*256; } } printf("%d %d %d %d\n",a[0],a[1],a[2],a[3]); } } return 0;}/*23MOV AX,2MOV BX,3ADD AX,BX5MOV AX,2MOV BX,030HMOV CX,11BADD AX,CXADD DL,CL*/

转载于:https://www.cnblogs.com/jhcelue/p/7305588.html

你可能感兴趣的文章
[转载]oracle删除数据后的恢复
查看>>
iOS 关于UITabVIew刷新的几种方法(针对初学者)
查看>>
B广搜深搜
查看>>
nyoj-----127星际之门(一)
查看>>
iOS中从相机中选取多张照片
查看>>
ghj1222的代码规范
查看>>
Http code 解析
查看>>
[ JS 进阶 ] Repaint 、Reflow 的基本认识和优化 (2)
查看>>
放到插入到数据库里面
查看>>
php模式设计之 观察者模式
查看>>
c# 获取 bios 序列号
查看>>
[转] Chrome 控制台不完全指南
查看>>
给现下流行的打车软件的一点小建议
查看>>
Git 文件比较
查看>>
leetcode 102. Binary Tree Level Order Traversal
查看>>
def权限,频率,分页
查看>>
Javascript switch语句
查看>>
替换localhost:8080(假域名,本地使用)
查看>>
jQuery学习笔记
查看>>
PHP设计模式:结构型之门面(facade)
查看>>