清華大學計算機
06考研上機題
只有系統結構方向參加上機,
3 月
27 日2:
00——4:
00
總述:用檔案
input.txt
輸入,用檔案
output.txt
輸出。程式設計環境只能用vc,沒有msdn,不能上網,不能查資料。題目1
:求n
的階乘。(
25分,
5組資料)
input.txt
4output.txt
24input.txt
15output.txt
1307674368000
解答:(
自己編寫的)
#include
#define maxn 3000
int longnum[maxn+1];
void mul(int b)
while(carry)
}void main()
}總結
:由於乘出來的數很大
,必須用陣列操作
,據說最後一組的測試資料為
1000,
所以陣列長度最少得
2567
位。題目
2:(最大和連續子串)給定一串串行,求其乙個連續子串行,使其和最大
,輸出這個和(
35分,
7組測試資料)
input.txt
4-1 -2 -3 -4
output.txt
-1input.txt
51 2 3 4 5
output.txt
15input.txt
623 34 -23 45 6 -7
output.txt
85解答:
program2.cpp
#include
#define minnum -32768
void main()
ofstream fout("output.txt");
fout<
fout.close();
}總結
:此題難點在必須使演算法複雜度為
o(n)
,如果用窮舉法,複雜度為
o(n2
).只能通過兩組資料後五組全為超時。題目3
:給出兒
bitree
的前序遍歷,和中序遍歷,輸出後序遍歷。
(40分,
8組測試資料)
input.txt
abcbac
output.txt
bcainput.txt
abcd
bdac
output.txt
no answer
解答:program3.cpp
#include
#define maxn 100
char a[maxn];
class binode
char data;
binode * lchild;
binode * rchild; };
int findinarray(int low,int high,int point)
int createtree(binode * & root,int low,int high,int & point)
int ret;
if((ret=findinarray(low,high,point))==-1)
return 0;
root=new binode(a[point]);
point++;
if(createtree(root->lchild,low,ret-1,point)&&createtree(root->rchild,ret+1,high,point))
return 1;
return 0; }
void postorder(binode * root,ofstream & fout) }
void main()
fin.close();
binode * root;
int point=0;
ofstream fout("output.txt");
if(createtree(root,count/2,count-1,point))
else
fout<<"no answer";
fout.close(); }
總結:考查遞迴程式設計
清華考研複試上機 進製轉換
將m進製的數x轉換為n進製的數輸出。輸入的第一行包括兩個整數 m和n 2 m,n 36 下面的一行輸入乙個數x,x是m進製的數,現在要求你將m進製的數x轉換成n進製的數輸出。輸出x的n進製表示的數。輸入時字母部分為大寫,輸出時為小寫,並且有大資料。示例1 16 10 f 15思路 這個題難就難在有 ...
清華考研複試上機 N的階乘
輸入乙個正整數n,輸出n的階乘。正整數n 0 n 1000 輸入可能包括多組資料,對於每一組輸入資料,輸出n的階乘示例1 4 515 24 1201307674368000思路 1000的階乘肯定是超過long long不知道多少位的。所以這道題只能用字串來處理。好在這道題要實現的乘法是乙個大整數乘...
清華考研複試上機 10進製 VS 2進製
對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。乙個1000位 即10 999 以內的...