计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx
- 文档编号:22380879
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:20
- 大小:27.71KB
计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx
《计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机院和网院复试上机真题以及参考代码回忆版Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
[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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 复试 上机 以及 参考 代码 回忆