机试题.docx

上传人:b****5 文档编号:7254485 上传时间:2023-01-22 格式:DOCX 页数:13 大小:20.34KB
下载 相关 举报
机试题.docx_第1页
第1页 / 共13页
机试题.docx_第2页
第2页 / 共13页
机试题.docx_第3页
第3页 / 共13页
机试题.docx_第4页
第4页 / 共13页
机试题.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

机试题.docx

《机试题.docx》由会员分享,可在线阅读,更多相关《机试题.docx(13页珍藏版)》请在冰豆网上搜索。

机试题.docx

机试题

Description

比较奇偶数的个数。

Input

第一行是一个正整数n,表示一共有n个数。

第二行为n个整数。

Output

n个整数中奇数多则输出YES,否则输出NO。

SampleInput

5

12345

SampleOutput

YES

题B

Description

在平面上的n个点中找出横坐标最小的点。

Input

第一行是一个正整数n(1<=n<=1000),表示一共有n个点。

接下来n行,每行2个整数,分别表示每个点的横坐标和纵坐标。

Output

输出横坐标最小的那个点的横坐标和纵坐标,如果横坐标最小的点有多个,则只输出其中纵坐标最小的那个点。

SampleInput

5

52

23

24

32

41

SampleOutput

23

题C

Description

子矩阵旋转操作。

Input

前5行每行5个整数,表示一个5*5阶的矩阵。

第6行为4个整数abcd,根据这4个整数进行相应的旋转操作。

Output

若ab分别为12,则将原矩阵中以第c行第d列元素为左上角的2*2阶子矩阵顺时钟旋转90度后输出原矩阵。

若ab分别为13,则将原矩阵中以第c行第d列元素为左上角的3*3阶子矩阵顺时钟旋转90度后输出原矩阵。

若ab分别为22,则将原矩阵中以第c行第d列元素为左上角的2*2阶子矩阵逆时钟旋转90度后输出原矩阵。

若ab分别为23,则将原矩阵中以第c行第d列元素为左上角的3*3阶子矩阵顺时钟旋转90度后输出原矩阵。

SampleInput

12345

678910

1112131415

1617181920

2122232425

1311

SampleOutput

116145

1272910

13831415

1617181920

2122232425

题D

Description

赫夫曼编码

给出n个有权值的结点,构造赫夫曼树,输出所有这n个结点的权值与其赫曼编码长度(即该结点在所构造的赫曼树中的深度)的乘积的总和。

Input

第一行是一个正整数n,表示一共有n个结点。

第二行为n个整数,分别表示这n个结点的权值。

Output

输出所有这n个结点的权值与其赫曼编码长度的乘积的总和。

SampleInput

5

12259

SampleOutput

37

PS:

北邮计算机学院的复试上机测试是2个小时4道题,前3题稍简单,最后一道有点难度。

但今年最后关于赫夫曼编码的那道题与09年的最后一道基本相同,复试前如果练过09年的上机题的话基本做今年的这道题应该没有问题,据说09年4道全AC的全院只有4个,今年又几乎原封不动的考了这道题,4道全AC的全院有30个左右。

个人感觉北邮复试机试和面试比较重要,听力和专业课笔试基本上是走过场,专业课复试前也就看了半天编译原理(实在看不下去),基本是裸考。

以下是上面4道题的C++代码,都能AC。

代码除了注释外都是复试时候写的(题D为了在VC上也能编译,稍微改动了一下),由于时间关系,考试时并没有考虑效率问题,只是想尽快AC就行,所以这些代码并不一定是效率最好的,应该还有不少改进的余地。

=================================

题A

#include

usingnamespacestd;

intmain()

{

   inteven=0,odd=0;

   intn;

   cin>>n;

   intnum;

   for(inti=0;i

       cin>>num;

       if(num%2)

           odd++;

       else

           even++;

   }

   if(odd>even)

       cout<<"YES\n";

   else

       cout<<"NO\n";

   return0;

}

=================================

题B

#include

#include

#include

usingnamespacestd;

structnode{

   intx;

   inty;

};

boolcmpx(node*a,node*b){

   returna->xx;

}

boolcmpy(node*a,node*b){

   returna->yy;

}

intmain()

{

   intn;

   cin>>n;

   vectornvec;

   for(inti=0;i

       node*nd=newnode;

       cin>>nd->x>>nd->y;

       nvec.push_back(nd);

   }

   sort(nvec.begin(),nvec.end(),cmpy);

   stable_sort(nvec.begin(),nvec.end(),cmpx);

   cout<x<<""<y<

   return0;

}

=================================

题C

#include

usingnamespacestd;

intmain()

{

   intalt[5][5];

   intcmdx,cmdy,x,y;

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

       for(intj=0;j<5;j++)

           cin>>alt[i][j];

   cin>>cmdx>>cmdy>>x>>y;

   if(cmdx==2)

       if(cmdy==2){

           int*arr=newint[4];

           arr[0]=alt[x-1][y-1];

           arr[1]=alt[x-1][y];

           arr[2]=alt[x][y-1];

           arr[3]=alt[x][y];

           alt[x-1][y-1]=arr[1];

           alt[x-1][y]=arr[3];

           alt[x][y-1]=arr[0];

           alt[x][y]=arr[2];

       }

       else{

           int*arr=newint[9];

           arr[0]=alt[x-1][y-1];

           arr[1]=alt[x-1][y];

           arr[2]=alt[x-1][y+1];

           arr[3]=alt[x][y-1];

           arr[4]=alt[x][y];

           arr[5]=alt[x][y+1];

           arr[6]=alt[x+1][y-1];

           arr[7]=alt[x+1][y];

           arr[8]=alt[x+1][y+1];

           alt[x-1][y-1]=arr[2];

           alt[x-1][y]=arr[5];

           alt[x-1][y+1]=arr[8];

           alt[x][y-1]=arr[1];

           alt[x][y]=arr[4];

           alt[x][y+1]=arr[7];

           alt[x+1][y-1]=arr[0];

           alt[x+1][y]=arr[3];

           alt[x+1][y+1]=arr[6];

       }

   else

       if(cmdy==2){

           int*arr=newint[4];

           arr[0]=alt[x-1][y-1];

           arr[1]=alt[x-1][y];

           arr[2]=alt[x][y-1];

           arr[3]=alt[x][y];

           alt[x-1][y-1]=arr[2];

           alt[x-1][y]=arr[0];

           alt[x][y-1]=arr[3];

           alt[x][y]=arr[1];

       }

       else{

           int*arr=newint[9];

           arr[0]=alt[x-1][y-1];

           arr[1]=alt[x-1][y];

           arr[2]=alt[x-1][y+1];

           arr[3]=alt[x][y-1];

           arr[4]=alt[x][y];

           arr[5]=alt[x][y+1];

           arr[6]=alt[x+1][y-1];

           arr[7]=alt[x+1][y];

           arr[8]=alt[x+1][y+1];

           alt[x-1][y-1]=arr[6];

           alt[x-1][y]=arr[3];

           alt[x-1][y+1]=arr[0];

           alt[x][y-1]=arr[7];

           alt[x][y]=arr[4];

           alt[x][y+1]=arr[1];

           alt[x+1][y-1]=arr[8];

           alt[x+1][y]=arr[5];

           alt[x+1][y+1]=arr[2];

       }

       for(intii=0;ii<5;ii++){            

           for(intjj=0;jj<4;jj++)

               cout<

           cout<

       }

   return0;

}

=================================

题D

#include

#include

#include

usingnamespacestd;

intlen=0;

structnode{

   intvalue;

   intdepth;

   node*left;

   node*right;

   booloperator<(node&a){returnvalue

};

voidcalculate(node*n){

   if(n!

=0){

       n->depth=len;

       len++;

       calculate(n->left);

       calculate(n->right);

       len--;

   }

}

voidgetSum(node*n,int&s){

   if(n!

=0){

       if(n->left==0&&n->right==0)

           s+=(n->depth)*(n->value);

       if(n->left!

=0)

           getSum(n->left,s);

       if(n->right!

=0)

           getSum(n->right,s);

   }

}

intmain()

{

   intn;

   intsum=0;

   cin>>n;

   listnlist;

   for(inti=0;i

       node*nd=newnode;

       cin>>nd->value;

       nd->left=nd->right=0;

       nlist.push_back(nd);

   }

   nlist.sort();

   node*root;

   while(nlist.size()>1){

       node*nd1=nlist.front();

       nlist.pop_front();

       node*nd2=nlist.front();

       nlist.pop_front();

       node*nd=newnode;

       nd->value=nd1->value+nd2->value;

       nd->left=nd1;

       nd->right=nd2;

       list:

:

iteratorit;

       for(it=nlist.begin();it!

=nlist.end();it++)

           if((*it)->value>nd->value)

               break;

       nlist.insert(it,nd);

       

   }

   root=nlist.front();

   

   

   calculate(root);//遍历一次赫夫曼树,计算出每个叶子结点的深度

   getSum(root,sum);//又遍历了一次赫夫曼树,计算出所求总和,实际上应该只需遍历一次即可

   cout<

   return0;       

}

为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自:

找出满足下列性质的三位数,输出并统计其个数:

能被11整除,且三个数位上没有两个数相同。

例:

121不可以。

4.      写一段满足下列条件的程序:

输入一个数n和m,把低m位移到高位并输出。

例:

123456789  3,回车后输出789123456.(不允许用数组实现)

5.      编写程序,输入n(n>=5),打印一个以n为参数的钻石形。

(他给出了一个图形,图形元素为星号,我不懂什么叫钻石形,也没从图中总结出规律,没做。

至于钻石形,读者自查吧)

6.      用数值迭代法求一个正数的开方,此数由键盘输入,满足前后两次结果数之差小于0.00001。

(他给出了迭代公式,我现在的机器不好写,读者自查吧)

7.      从键盘输入一组数,存入一链表中,以-1为链表结束的标志,且-1不作为链表节点。

并对其排序,按升序(注:

也可能是降序)输出。

8.      对给定的一个数组:

a[]={1,35,63,26,85,23,67,81,15,38,80,200},使用系统给定的二分查找函数bsearch()(注:

可能是这样写的,不确定)将其排序并输出。

此函数要查看系统联机文档,查看其用法。

以上试题不保证没有错漏,毕竟是回忆版的,但大致意思是对的。

上机环境为vc或tc可选,本人选的vc,感觉还是vc较好吧,tc毕竟“老古董”了。

下面是07年一个学长(谢谢这位好心人!

)写的上机题目:

计算机07复试上机

今年上机分数集中在40~60之间,据说有两个0分,我写完七个57分

第三题闰年条件写得不对,自己改吧

第七题写的不够简单,当时只想出结果就行了,自己可以优化一下

今年编程源码可以保存在优盘或软盘,以前是软盘,优盘复试时候还,软盘不还

另外上机时间2小时,在编程时候先用记事本写上

#include

#include

#include

voidmain(){}

直接往里面贴就省时间了

我Q285605960,备注:

本校跨专业考计算机,有什么需要可以找我

下面的题目是我根据源码回忆的,可能不太准确,基本上是这样,主要是看看难度

1题目写出递归方程

2//找出这样的数:

本身是三位的完全平方数n(100<=n<1000),而且有有两位上的数字相同,如484

3//输入年份和月份,计算该年初到该年这个月底的总天数(注意闰年)

4//用牛顿迭代法求某正数n的平方根

5/求亲密数a,b(均为正整数):

a的所有因子(含1不含a本身)之和为b,若b的所有因子(含1不含b本身)之和为a,则a,b为亲密数,求满足a

6//给定数组,求连续三元素之和,输出和最大的第一个元素的下标

7//键盘输入正整数序列-1结尾,以此按升序建立双向循环链表,并降序输出

8键盘输入算数表达式(字符串的),求计算结果.(这题没来得及)

//以下是源码,我写的

1题目写出递归方程#include

#include

floatfun(floatx,intn){

if(0==n){

  return1;

}elseif(1==n){

  returnx;

}else{

  return((2*n-1)*x-fun(x,n-1)-(n-1)*fun(x,n-2)/n);

}

}

voidmain(){

intn;

floatp,x;

cout<

  cout<

cout<

}//main

2//找出这样的数:

本身是三位的完全平方数n(100<=n<1000),而且有有两位上的数字相同,如484

#include

#include

#include

intfun1(intn){

inttemp;

temp=(int)sqrt(n);

if(n==temp*temp){

  return1;

}else{

  return0;

}

}

intfun2(intn){

inta[3],i;

for(i=0;i<3;i++){

  a=n%10;

  n/=10;

}

if(a[0]==a[1]||a[1]==a[2]||a[0]==a[2])  return1;

elsereturn0;

}

voidmain(){

intn;

for(n=100;n<1000;n++){

  if(fun1(n)&&fun2(n)){

  cout<<"n="<

  }

}

}//main

3//输入年份和月份,计算该年初到该年这个月底的总天数(注意闰年)

#include

#include

#include

intleapyear(intyear){

if(year%4==0||year%400==0){

  return1;

}elsereturn0;

}

voidmain(){

intyear,month;

intnum=0,feb=0;

cout<<"请输入年份n和月份m"<

cin>>year>>month;

if(leapyear(year))feb=29;

elsefeb=28;

switch(month){

case1:

num=num+31;break;

case2:

num=num+31+feb;break;

case3:

num=num+31+feb+31;break;

case4:

num=num+31+feb+31+30;break;

case5:

num=num+31+feb+31+30+31;break;

case6:

num=num+31+feb+31+30+31+30;break;

case7:

num=num+31+feb+31+30+31+30+31;break;

case8:

num=num+31+feb+31+30+31+30+31+31;break;

case9:

num=num+31+feb+31+30+31+30+31+31+30;break;

case10:

num=num+31+feb+31+30+31+30+31+31+30+31;break;

case11:

num=num+31+feb+31+30+31+30+31+31+30+31

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1