计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx

上传人:b****7 文档编号:22380879 上传时间:2023-02-03 格式:DOCX 页数:20 大小:27.71KB
下载 相关 举报
计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx_第1页
第1页 / 共20页
计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx_第2页
第2页 / 共20页
计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx_第3页
第3页 / 共20页
计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx_第4页
第4页 / 共20页
计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx

《计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx

[3]三张如444规则如[2]

[4]四张如4444规则如[2]

[5]五张牌型只有1234523456345674567856789五个,后面的比前面的均大

压过输出YES否则NO

12233445566677(手中牌)

33(出牌)

第四题:

树查找

简单说就是一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY,具体描述得借助图形比较好,懒得写了,基本就是这个样子的。

2010计算机学院上机题目回忆版

ACM——BOJ——2010年北邮计算机学院研究生入学考试(复试)上机测试——即1814(A比较奇偶数个数)、1815(B找最小数)、1816(C翻转)、1817(D哈夫曼树)

因为boj上题目都已经看不到了。

所以题目只能是回忆版。

但boj上仍然可以提交。

所有知道题意以后,仍然可以自己进行测试。

题目大意(回忆版):

第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES。

Sample:

Input:

5

12345

Output:

ProblemId:

1814

Submittime:

2010-04-1014:

06:

48

User_id:

bupt111310352

Memory:

72KTime:

17MS

Language:

G++Result:

Accepted

Code

*/

#include<

stdio.h>

intmain()

{

//所有数的数目

intm_Num_Count;

scanf("

%d"

&

m_Num_Count);

//输入数

intm_Input_Num;

//偶数奇数的个数

intm_Oushu_Count=0,m_Jishu_Count=0;

//循环输入

while(m_Num_Count>

0)

{

m_Input_Num);

getchar();

//判断奇偶并计数

if((m_Input_Num%2)==0)

++m_Oushu_Count;

else

++m_Jishu_Count;

--m_Num_Count;

}

//输出

if(m_Jishu_Count>

=m_Oushu_Count)

printf("

YES\n"

);

NO\n"

return0;

}

/*

第一行输入一个数n,1<

=n<

=1000,下面输入n行数据,每一行有两个数,分别是xy。

输出一组xy,该组数据是所有数据中x最小,且在x相等的情况下y最小的。

33

22

55

21

36

1815

24:

39

104KTime:

19MS

typedefstructLNode

intm_X;

//x坐标值

intm_Y;

//y坐标值

boolm_Used;

//该位是否被使用

};

//样例个数

intm_Case_Count;

scanf("

m_Case_Count);

//因为1<

=N<

=1000,建结点

LNodem_Case[1000];

//循环数

intm_Cycle;

//最小的x,y值,并初始化,1<

=x,y<

=1000

intm_X_Min=1000,m_Y_Min=1000;

//初始化结点被使用状态

for(m_Cycle=0;

m_Cycle<

1000;

++m_Cycle)

m_Case[m_Cycle].m_Used=false;

//初始化循环数,下面使用

m_Cycle=0;

//循环输入样例

while(m_Case_Count>

0)

//输入坐标值

%d%d"

m_Case[m_Cycle].m_X,&

m_Case[m_Cycle].m_Y);

//置状态值,并且m_Cycle++

m_Case[m_Cycle++].m_Used=true;

--m_Case_Count;

//循环找最小的x,y值

(m_Cycle<

1000)&

&

(m_Case[m_Cycle].m_Used);

if(m_Case[m_Cycle].m_X<

m_X_Min)

//如果找到更小的x值,记录

m_X_Min=m_Case[m_Cycle].m_X;

m_Y_Min=m_Case[m_Cycle].m_Y;

elseif(m_Case[m_Cycle].m_X==m_X_Min)

//如果x值相等,判断y值,如果在相等的x值的条件下,找到更小的的y值,记录y

if(m_Case[m_Cycle].m_Y<

m_Y_Min)

//输出找到的最小值

%d%d\n"

m_X_Min,m_Y_Min);

/*

该题是要翻转数据。

首先输入一个5*5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数xy代表需操作数据为以xy为左上角的那几个数据。

操作类型有四种:

12表示:

90度,顺时针,翻转4个数

13表示:

90度,顺时针,翻转9个数

22表示:

90度,逆时针,翻转4个数

23表示:

90度,逆时针,翻转9个数

678910

1112131415

1617181920

2122232425

1311

116145

1272910

13831415

1816

2010-04-1015:

04

88KTime:

14MS

解题思路:

--。

自己细心点就行。

//输入数据

intm_Case[5][5];

%d%d%d%d%d"

m_Case[0][0],&

m_Case[0][1],&

m_Case[0][2],&

m_Case[0][3],&

m_Case[0][4]);

m_Case[1][0],&

m_Case[1][1],&

m_Case[1][2],&

m_Case[1][3],&

m_Case[1][4]);

m_Case[2][0],&

m_Case[2][1],&

m_Case[2][2],&

m_Case[2][3],&

m_Case[2][4]);

m_Case[3][0],&

m_Case[3][1],&

m_Case[3][2],&

m_Case[3][3],&

m_Case[3][4]);

m_Case[4][0],&

m_Case[4][1],&

m_Case[4][2],&

m_Case[4][3],&

m_Case[4][4]);

//输入操作

intm_Op_First,m_Op_Second,m_X,m_Y;

%d%d%d%d"

m_Op_First,&

m_Op_Second,&

m_X,&

m_Y);

//临时数据

intm_Temp_First,m_Temp_Second;

if((m_Op_First==1)&

(m_Op_Second==2))

//如果是12,翻转4个数,90度,顺时针

m_Temp_First=m_Case[m_X-1][m_Y-1];

m_Case[m_X-1][m_Y-1]=m_Case[m_X][m_Y-1];

m_Case[m_X][m_Y-1]=m_Case[m_X][m_Y];

m_Case[m_X][m_Y]=m_Case[m_X-1][m_Y];

m_Case[m_X-1][m_Y]=m_Temp_First;

elseif((m_Op_First==1)&

(m_Op_Second==3))

//如果是13,翻转9个数,90度,顺时针

//00

m_Temp_Second=m_Case[m_X][m_Y-1];

//10

m_Case[m_X-1][m_Y-1]=m_Case[m_X+1][m_Y-1];

;

//00=20

m_Case[m_X][m_Y-1]=m_Case[m_X+1][m_Y];

//10=21

m_Case[m_X+1][m_Y-1]=m_Case[m_X+1][m_Y+1];

//20=22

m_Case[m_X+1][m_Y]=m_Case[m_X][m_Y+1];

//21=12

m_Case[m_X+1][m_Y+1]=m_Case[m_X-1][m_Y+1];

//22=02

m_Case[m_X][m_Y+1]=m_Case[m_X-1][m_Y];

//12=01

m_Case[m_X-1][m_Y+1]=m_Temp_First;

//02=00

m_Case[m_X-1][m_Y]=m_Temp_Second;

//01=10

elseif((m_Op_First==2)&

//如果是22,翻转4个数,90度,逆时针

m_Case[m_X-1][m_Y-1]=m_Case[m_X-1][m_Y];

m_Case[m_X-1][m_Y]=m_Case[m_X][m_Y];

m_Case[m_X][m_Y]=m_Case[m_X][m_Y-1];

m_Case[m_X][m_Y-1]=m_Temp_First;

////如果是23,翻转9个数,90度,逆时针

m_Temp_Second=m_Case[m_X-1][m_Y];

//01

m_Case[m_X-1][m_Y-1]=m_Case[m_X-1][m_Y+1];

//00=02

m_Case[m_X-1][m_Y]=m_Case[m_X][m_Y+1];

//01=12

m_Case[m_X-1][m_Y+1]=m_Case[m_X+1][m_Y+1];

//02=22

m_Case[m_X][m_Y+1]=m_Case[m_X+1][m_Y];

//12=21

m_Case[m_X+1][m_Y+1]=m_Case[m_X+1][m_Y-1];

//22=20

m_Case[m_X+1][m_Y]=m_Case[m_X][m_Y-1];

//21=10

m_Case[m_X+1][m_Y-1]=m_Temp_First;

//20=00

m_Case[m_X][m_Y-1]=m_Temp_Second;

//10=01

printf("

%d%d%d%d%d\n"

m_Case[0][0],m_Case[0][1],m_Case[0][2],m_Case[0][3],m_Case[0][4]);

m_Case[1][0],m_Case[1][1],m_Case[1][2],m_Case[1][3],m_Case[1][4]);

m_Case[2][0],m_Case[2][1],m_Case[2][2],m_Case[2][3],m_Case[2][4]);

m_Case[3][0],m_Case[3][1],m_Case[3][2],m_Case[3][3],m_Case[3][4]);

m_Case[4][0],m_Case[4][1],m_Case[4][2],m_Case[4][3],m_Case[4][4]);

//我最纠结的题。

前3个题一个小时。

这个题一个小时都没有弄完。

我实在是很郁闷啊。

当时真感觉自己想法太多了。

还不如好好分析分析。

这个题主要是要设parent指针。

如果这题还需要输出哈夫曼编码的话,则需要同时设rchild与lchild指针。

太纠结了这道题。

这都没做出来,强烈bs自己。

回家弄了会就弄出来了。

哈夫曼树,第一行输入一个数n,表示叶结点的个数。

需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。

12259

37

解释:

即生成如下图哈夫曼树,结点1的权值为4,结点2的权值为4,结点2的权值为3,结点5的权值为2,结点9的权值为1,和为37

1817

2010-04-1410:

49:

17

96KTime:

16MS

//结点的数据结构

typedefstructHNode

unsignedintweight;

//权值

unsignedintparent;

//父结点

//在m_Node的0到m_Cycle之间寻找parent指针为0且最小的两个结点

//并在数组最后存放这两个结点形成的父结点

voidSelect(HNode*m_Node,intm_Cycle)

inttemp;

//记录下最小的两个数的位置

intm_FirstMin_Pos=-1,m_SecondMin_Pos=-1;

//最小的两个数,初始赋值为题目所给最大值加1

intm_FirstMin=1001,m_SecondMin=1001;

for(temp=0;

temp<

=m_Cycle;

++temp)

if(m_Node[temp].parent==0)

//如果结点权值比m_FirstMin还小,

//则FirstMin将值传递给m_Node_SecondMin,FirstMin结点指向查出的最小值结点

//记录该结点位置

if(m_Node[temp].weight<

m_FirstMin)

m_SecondMin=m_FirstMin;

m_SecondMin_Pos=m_FirstMin_Pos;

m_FirstMin=m_Node[temp].weight;

m_FirstMin_Pos=temp;

//如果点权值比FirstMin大,但比m_Node_SecondMin小,

//则m_Node_SecondMin指向查出的最小值结点,并记录位置

m_SecondMin)

m_SecondMin=m_Node[temp].weight;

m_SecondMin_Pos=temp;

//在m_Cycle+1的位置为最小的两个结点的和生成的结点

m_Node[++m_Cycle].weight=m_FirstMin+m_SecondMin;

//两个最小值结点的parent赋值

m_Node[m_FirstMin_Pos].parent=m_Cycle;

m_Node[m_SecondMin_Pos].parent=m_Cycle;

//叶结点的数目

intm_Num_Count,m_Num_Count_Temp=0;

m_Num_Count);

//最后形成的哈夫曼树总结点个数,为叶子结点个数*2-1

intm_TotalNode_Count=2*m_Num_Count-1;

//存哈夫曼树的数组

HNodem_Node[2*m_Num_Count-1];

//临时输入数

intm_TempInput;

//循环输入叶结点

while(m_Num_Count_Temp<

m_Num_Count)

//输入数据,m_Node数组的前m_Num_Count个存放叶结点

m_TempInput);

//放入到数组

m_Node[m_Num_Count_Temp].weight=m_Te

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1