北理计算机复试上机题.docx
- 文档编号:11627317
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:15
- 大小:20.49KB
北理计算机复试上机题.docx
《北理计算机复试上机题.docx》由会员分享,可在线阅读,更多相关《北理计算机复试上机题.docx(15页珍藏版)》请在冰豆网上搜索。
北理计算机复试上机题
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,"< < } 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< } 第三题要求编写一个复数类,要求有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()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 复试 上机
![提示](https://static.bdocx.com/images/bang_tan.gif)