北理计算机复试上机题.docx

上传人:b****6 文档编号:7692833 上传时间:2023-05-11 格式:DOCX 页数:15 大小:20.49KB
下载 相关 举报
北理计算机复试上机题.docx_第1页
第1页 / 共15页
北理计算机复试上机题.docx_第2页
第2页 / 共15页
北理计算机复试上机题.docx_第3页
第3页 / 共15页
北理计算机复试上机题.docx_第4页
第4页 / 共15页
北理计算机复试上机题.docx_第5页
第5页 / 共15页
北理计算机复试上机题.docx_第6页
第6页 / 共15页
北理计算机复试上机题.docx_第7页
第7页 / 共15页
北理计算机复试上机题.docx_第8页
第8页 / 共15页
北理计算机复试上机题.docx_第9页
第9页 / 共15页
北理计算机复试上机题.docx_第10页
第10页 / 共15页
北理计算机复试上机题.docx_第11页
第11页 / 共15页
北理计算机复试上机题.docx_第12页
第12页 / 共15页
北理计算机复试上机题.docx_第13页
第13页 / 共15页
北理计算机复试上机题.docx_第14页
第14页 / 共15页
北理计算机复试上机题.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

北理计算机复试上机题.docx

《北理计算机复试上机题.docx》由会员分享,可在线阅读,更多相关《北理计算机复试上机题.docx(15页珍藏版)》请在冰点文库上搜索。

北理计算机复试上机题.docx

北理计算机复试上机题

2006年北理计算机复试上机题

2009-09-1910:

48

1.写一个程序判断字符串中数字的位置(不限制使用面向对象编程)

例如:

输入  a3b4c5

      输出  246

实现:

#include

#include

usingnamespacestd;

intmain()

{

   charc_arr[100];

   inti,len=0;

   cout<<"Pleaseenterastring:

"<

   cin>>c_arr;

   while(c_arr[len++]);

   cout<

   for(i=0;i

   {

       if(isdigit(c_arr))

       {

           cout<

       }

   }

   cout<

   return0;

}

2.写一个类,能接受int型的变量,接收变量后能存储原变量(譬如12345)和其反向变量(54321),最多处理数量为10个,当输入达到10个或者输入变量为0的时候停止。

并且在类销毁前输出存储的所有变量。

例如:

输入:

12345,2234,0

           输出:

12345  54321

                 22344322

实现:

#include

usingnamespacestd;

typedefstructs_store

{

   intnum;

   intreverseNum;

}s_store;

classCStore

{

public:

   CStore(){};

   ~CStore(){};

   voidsetS_st(intnum,intsub);

   voidsetCount();

   voidprint(intsub);

   intgetCount();

protected:

private:

   staticintcount;

   s_stores_st[10];

};

intCStore:

:

count=0;

intmain()

{

   CStorecs;

   intnum,size;

   cout<<"Pleaseenteryourdata:

"<

   cin>>num;

   cs.setS_st(num,cs.getCount());

   cs.setCount();

   //cout<<"countis:

"<

   while(cs.getCount()<10)

   {

       cin>>num;

       if(num==0)

       {

           break;

       }

       cs.setS_st(num,cs.getCount());

       cs.setCount();

       //cout<<"Inwhilecountis:

"<

   }

   size=cs.getCount();

   //cout<<"sizeis:

"<

   for(inti=0;i

   {

       cs.print(i);

       cout<

   }

   return0;

}

voidCStore:

:

setS_st(intnum,intsub)

{

   s_st[sub].num=num;

   intb=0,a;

   while(num>0)

   {

       b*=10;

       a=num%10;

       b+=a;

       num/=10;

   }

   s_st[sub].reverseNum=b;

}

voidCStore:

:

setCount()

{

   count++;

}

intCStore:

:

getCount()

{

   returncount;

}

voidCStore:

:

print(intsub)

{

   cout<

}

3.写一个CTriangle类,要求可以接受CTriangle(y,x)形式的构造,创建在坐标系中的直角三角形样子如下

A  

  |\

  |  \

  |     \

  |        \

B----------C

三点的坐标分别是A(0,y)B(0,0)C(x,0)

实现+运算,并且能够处理键盘连续输入若干个(少于十个)三角形,并且连加(相加时候三角形边长长度相加,方向同第一个三角形)。

输入0后结束并输出最后得出的三角形的三个坐标值。

例如:

    输入:

1   2

           -1  -5

    输出:

A(0,7),B(0,0),C(2,0)

实现:

#include

#include

#include

usingnamespacestd;

classCTriangle

{

public:

   CTriangle(doubley,doublex);

   ~CTriangle(){};

   voidset(doubley,doublex);

   voidaddTriangle();

   voidprintShape();

   voidprint();

protected:

private:

   doublex;

   doubley;

};

intmain()

{

   CTrianglectrgle(10,-4),ctrgle1(10,4),ctrgle2(10,-4),ctrgle3(-10,-4);

   ctrgle.printShape();

   ctrgle.print();

   ctrgle1.printShape();

   ctrgle1.print();

   ctrgle2.printShape();

   ctrgle2.print();

   ctrgle3.printShape();

   ctrgle3.print();

   ctrgle.addTriangle();

   ctrgle.printShape();

   return0;

}

CTriangle:

:

CTriangle(doubley,doublex)

{

   set(y,x);

}

voidCTriangle:

:

set(doubley,doublex)

{

   this->y=y;

   this->x=x;

}

voidCTriangle:

:

addTriangle()

{

   set(0,0);

   doubleyval,xval;

   intcount=0;

   boolxjudge=true,yjudge=true;

   cout<<"Pleaseenterthevalues:

"<

   cin>>xval>>yval;

   if(xval<0)

   {

       xjudge=false;

   }

   if(yval<0)

   {

       yjudge=false;

   }

   while(xval)

   {

       this->y+=abs(yval);

       this->x+=abs(xval);

       cin>>xval;

       if(!

xval)

       {

           break;

       }

       cin>>yval;

   }

   if(!

xjudge)

   {

       this->x=(this->x)*(-1);

   }

   if(!

yjudge)

   {

       this->y=(this->y)*(-1);

   }

   print();

}

voidCTriangle:

:

printShape()

{

   inti,num;

   if(y>0&&x>0)

   {

       for(i=0;i

       {

           if((i+1)%2==0)

           {

               cout<

               continue;

           }

           cout<<"|"<

       }

       for(i=0;i

       {

           cout<<"-";

       }   

   }

   elseif(y<0&&x>0)

   {

       for(i=0;i

       {

           cout<<"-";

       }

       

       for(i=int(abs(y)-1);i>=0;i--)

       {

           if((i+1)%2==0)

           {

               cout<

               continue;

           }

           

           cout<<"|"<

       }

   }

   elseif(y>0&&x<0)

   {

       num=int(abs(y)-1);

       for(i=num;i>=0;i--)

       {

           if((i+1)%2==0)

           {

               cout<

               continue;

           }

           cout<

       }

       cout<

       for(i=0;i

       {

           cout<<"-";

       }

   }

   elseif(y<0&&x<0)

   {

       for(i=0;i

       {

           cout<<"-";

       }   

       cout<

       num=int(abs(y));

       for(i=0;i

       {

           if((i)%2==0)

           {

               cout<

               continue;

           }

           cout<

       }

       

   }

   cout<

}

voidCTriangle:

:

print()

{

   cout<<"A(0,"<y<<"),B(0,0),C("

       <x<<",0)"<

}

Timelimit:

1Seconds

TotalSubmit:

155  AcceptedSubmit:

3

题目要求:

现有一笔经费可以报销一定额度的发票。

允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。

现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。

具体的输入输出格式规定如下:

输入格式:

测试输入包含若干测试用例。

每个测试用例的第1行包含两个正数Q和N,其中Q是给定的报销额度,N(<=30)是发票张数。

随后是N行输入,每行的格式为:

 mType_1:

price_1Type_2:

price_2...Type_m:

price_m

其中正整数m是这张发票上所开物品的件数,Type_i和price_i是第i项物品的种类和价值。

物品种类用一个大写英文字母表示。

当N为0时,全部输入结束,相应的结果不要输出。

输出格式:

对每个测试用例输出1行,即可以报销的最大数额,精确到小数点后2位。

输入样例:

200.003

2A:

23.50B:

100.00

1C:

650.00

3A:

59.99A:

120.00X:

10.00

1200.002

2B:

600.00A:

400.00

1C:

200.50

1200.503

2B:

600.00A:

400.00

1C:

200.50

1A:

100.00

100.000

输出样例:

123.50

1000.00

1200.50

题目描述:

输入:

两行

  第一行:

M和N

  第二行:

X

  M和N是一个十进制数,M和N都在[2-35]之间,X是一个M进制数,X在[1-2*10^19]

  输出:

一行

  第一行:

现在要求你将M进制数X转换成N进制数输出

  注:

A相当于10,B相当于11,Z相当于35

  输入一:

  1610

  F

  输出一:

  15

2009年山东大学计算机复试上机题目【网友回忆版】

文章来源:

勤思教育转载请标明出处和链接   ,阅读次数:

[103]次

一共两个题,每个50分,上机环境不限,编程语言不限,只要求结果,不要源代码,数据随机生成。

题目均非准确描述,但保持了原意

【1】输入一个整数,它可以由n(n>=2)个连续整数相加得到,输出所有可能的连续整数序列,每个序列占一行,数字之间用空格分开,数据从小到大,每列按最小元素递增顺序排列,如果找不到,输出none

例:

21=1+2+3+4+5+6

  21=6+7+8

则输出123456

      678

【2】某国设计了一种导弹防御系统,但有缺陷,导弹来袭时,第一枚炮弹可以达到任意高度,但以后的任意一炮均不能超过前一发炮弹高度。

现在仅有一套这样的系统

输入:

来袭的导弹数目(不超过100枚)

输出:

1:

能够拦截的导弹数目30分

2:

若要拦截所有导弹,需要几套这样的系统20分

其实第一问就是找一个递减序列的长度,第二问就是找一下有几个这样的递减序列。

本次上机使用了一个考试系统,要求先编好这两个程序,然后输入你的姓名,系统就会随机生成两个题目的输入数据,运行后将结果在5分钟内输入提交,否则时间用完,重新生成一组输入数据,最多有三次机会。

很遗憾,第一次使用这样的东西,我得了0分。

而且与编程无关,反正编程我也不行,不过我得到的第一个数据实在比较简单:

98

可以用笔算得到结果,无需程序。

我分解对了,但填错位置了。

(苦笑),第二个我也知道怎么弄,不过一着急,数错个数了。

希望师弟师妹吸取教训。

第一题是给定一个程序,关于字符串的,要求输入并调试,说出此程序的意图。

意图是按字母顺序对两个字符串比较排序。

第二问要求用尽可能少的语句对该程序进行修改,使其能够对两个字符串比较长度排序

实现:

#include

#include

usingnamespacestd;

intmain()

{

   stringstr1,str2;

   cout<<"请输入两个字符串"<

   cin>>str1>>str2;

   if(str1

   {

       cout<"<

   }

   else

   {

       cout<"<

   }

   /*

   if(str1.length()

   {

       cout<

   }

   else

   {

       cout<

   }

   */

   return0;

}

第二题是要求编写一个日期类,要求按xxxx-xx-xx的格式输出日期,实现加一天的操作,不考虑闰年问题,所有月份设为30天。

本题黑盒测试时,输入2004年3月20日,得到加一天后时间为2004-3-21,能得一部分分数。

输入2004年3月30日,得到加一天后时间为2004-4-1,能得一部分分数。

输入2004年12月30日,得到加一天后时间为2005-1-1,且有时间越界处理,能得全部分数。

实现:

#include

usingnamespacestd;

classd_date

{

public:

   d_date();

   ~d_date(){};

   voidsetD_date(intyear,intmonth,intday);

   d_dateaddToD_date();

   voidprint();

protected:

private:

   intyear;

   intmonth;

   intday;

};

intmain()

{

   intyear,month,day;

   d_dated_dat;

   while(true)

   {

       cout<<"请输入年、月、日"<

       cin>>year;

       cin.ignore

(2);

       cin>>month;

       cin.ignore

(2);

       cin>>day;

       cin.ignore

(2);

       d_dat.setD_date(year,month,day);

       d_dat=d_dat.addToD_date();

       cout<<"加一天以后是:

"<

       d_dat.print();

   }

   

   return0;

}

d_date:

:

d_date()

{

   year=1900;

   month=1;

   day=1;

}

voidd_date:

:

setD_date(intyear,intmonth,intday)

{

   this->year=year;

   if(month<0||month>12)

   {

       cout<<"对不起,您输入的月份有误,将自动设置为1月"<

       this->month=1;

   }

   else

       this->month=month;

   if(day<0||day>30)

   {

       cout<<"对不起,您输入的日期有误,将自动设置为1日"<

       this->day=1;

   }

   else

       this->day=day;

}

d_dated_date:

:

addToD_date()

{

   day++;

   if(day>30)

   {

       day=1;

       month++;

   }

   if(month>12)

   {

       month=1;

       year++;

   }

   return*this;

}

voidd_date:

:

print()

{

   cout<year<<"-"<month<<"-"<day<

}

第三题要求编写一个复数类,要求有4条。

一是有构造函数,能对复数初始化。

二是对复数c1,c2,c3.....能实现连加运算,令c=c1+c2+c3+.....此处可以重载加法操作符。

三是有函数实现两个复数相加,并按照a+ib的形式输出。

四是能实现对一个复数c=a+ib,定义doublex=c有效,使x的值为实部和虚部之和。

实现:

#include

usingnamespacestd;

classPluralism

{

public:

   Pluralism();

   ~Pluralism(){};

   Pluralism&operator+(constPluralism&);

   voidsetPluralism();

   voidaddAnother(constPluralism&);

   voidprint();

   doublequalificatory()

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2