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

提交評論