2006年北理计算机复试上机题_第1页
2006年北理计算机复试上机题_第2页
2006年北理计算机复试上机题_第3页
2006年北理计算机复试上机题_第4页
2006年北理计算机复试上机题_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

2006年北理计算机复试上机题2009-09-1910:481.写一个程序判断字符串中数字的位置(不限制使用面向对象编程)例如:输入

a3b4c5

输出

246

实现:

#include<iostream>

#include<ctype.h>

usingnamespacestd;

intmain()

{

charc_arr[100];

inti,len=0;

cout<<"Pleaseenterastring:"<<endl;

cin>>c_arr;

while(c_arr[len++]);

cout<<c_arr<<endl;

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

{

if(isdigit(c_arr))

{

cout<<i+1<<"";

}

}

cout<<endl;

return0;

}

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

输出:12345

54321

22344322

实现:

#include<iostream>

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:"<<endl;

cin>>num;

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

cs.setCount();

//cout<<"countis:"<<cs.getCount()<<endl;

while(cs.getCount()<10)

{

cin>>num;

if(num==0)

{

break;

}

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

cs.setCount();

//cout<<"Inwhilecountis:"<<cs.getCount()<<endl;

}

size=cs.getCount();

//cout<<"sizeis:"<<size<<endl;

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

{

cs.print(i);

cout<<endl;

}

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<<s_st[sub].num<<""<<s_st[sub].reverseNum;

}

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<iostream>

#include<cmath>

#include<iomanip>

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:"<<endl;

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<y;i++)

{

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

{

cout<<endl;

continue;

}

cout<<"|"<<setw(3*i/2+1)<<"\\"<<endl;

}

for(i=0;i<x*5;i++)

{

cout<<"-";

}

}

elseif(y<0&&x>0)

{

for(i=0;i<x*5;i++)

{

cout<<"-";

}

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

{

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

{

cout<<endl;

continue;

}

cout<<"|"<<setw(3*i/2+1)<<"/"<<endl;

}

}

elseif(y>0&&x<0)

{

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

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

{

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

{

cout<<endl;

continue;

}

cout<<setw(3*i/2+4)<<"/"<<setw(num+4-(3*i/2))<<"|"<<endl;

}

cout<<endl;

for(i=0;i<abs(x*5);i++)

{

cout<<"-";

}

}

elseif(y<0&&x<0)

{

for(i=0;i<abs(x*5);i++)

{

cout<<"-";

}

cout<<endl;

num=int(abs(y));

for(i=0;i<abs(y);i++)

{

if((i)%2==0)

{

cout<<endl;

continue;

}

cout<<setw(3*i/2+1)<<"\\"<<setw(num+4-3*i/2)<<"|"<<endl;

}

}

cout<<endl;

}

voidCTriangle::print()

{

cout<<"A(0,"<<this->y<<"),B(0,0),C("

<<this->x<<",0)"<<endl;

}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输出样例:

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

输出一:

152009年山东大学计算机复试上机题目【网友回忆版】文章来源:勤思教育转载请标明出处和链接

,阅读次数:[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<iostream>

#include<string>

usingnamespacestd;

intmain()

{

stringstr1,str2;

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

cin>>str1>>str2;

if(str1<str2)

{

cout<<str2<<">"<<str1<<endl;

}

else

{

cout<<str1<<">"<<str2<<endl;

}

/*

if(str1.length()<str2.length())

{

cout<<str2<<"islongthan"<<str1<<endl;

}

else

{

cout<<str1<<"islongthan"<<str2<<endl;

}

*/

return0;

}第二题是要求编写一个日期类,要求按xxxx-xx-xx的格式输出日期,实现加一天的操作,不考虑闰年问题,所有月份设为30天。本题黑盒测试时,输入2004年3月20日,得到加一天后时间为2004-3-21,能得一部分分数。输入2004年3月30日,得到加一天后时间为2004-4-1,能得一部分分数。输入2004年12月30日,得到加一天后时间为2005-1-1,且有时间越界处理,能得全部分数。

实现:

#include<iostream>

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<<"请输入年、月、日"<<endl;

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<<"加一天以后是:"<<endl;

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月"<<endl;

this->month=1;

}

else

this->month=month;

if(day<0||day>30)

{

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

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<<this->year<<"-"<<this->month<<"-"<<this->day<<endl;

}

第三题要求编写一个复数类,要求有4条。一是有构造函数,能对复数初始化。二是对复数c1,c2,c3.....能实现连加运算,令c=c1+c2+c3+.....此处可以重载加法操作符。三是有函数实现两个复数相加,并按照a+ib的形式输出。四是能实现对一个复数c=a+ib,定义doublex=c有效,使x的值为实部和虚部之和。

实现:

#include<iostream>

usingnamespacestd;

classPluralism

{

public:

Pluralism();

~Pluralism(){};

Pluralism&operator+(constPluralism&);

voidsetPluralism();

voidaddAnother(constPluralism&);

voidprint();

doublequalificatory();

protected:

private:

doublereal;

doublevain;

};

intmain()

{

Pluralismp_p1,p_p2,p_p3,p_p4;

cout<<"Entervaluelike13:"<<endl;

p_p1.setPluralism();

cout<<"p_p1is:";

p_p1.print();

p_p2.setPluralism();

cout<<"p_p2is:";

p_p2.print();

温馨提示

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

评论

0/150

提交评论