浙大计算机学院考研复试上机试题及参考答案免费.docx

上传人:b****1 文档编号:13858012 上传时间:2023-06-18 格式:DOCX 页数:45 大小:28.47KB
下载 相关 举报
浙大计算机学院考研复试上机试题及参考答案免费.docx_第1页
第1页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第2页
第2页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第3页
第3页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第4页
第4页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第5页
第5页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第6页
第6页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第7页
第7页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第8页
第8页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第9页
第9页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第10页
第10页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第11页
第11页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第12页
第12页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第13页
第13页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第14页
第14页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第15页
第15页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第16页
第16页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第17页
第17页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第18页
第18页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第19页
第19页 / 共45页
浙大计算机学院考研复试上机试题及参考答案免费.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

浙大计算机学院考研复试上机试题及参考答案免费.docx

《浙大计算机学院考研复试上机试题及参考答案免费.docx》由会员分享,可在线阅读,更多相关《浙大计算机学院考研复试上机试题及参考答案免费.docx(45页珍藏版)》请在冰点文库上搜索。

浙大计算机学院考研复试上机试题及参考答案免费.docx

浙大计算机学院考研复试上机试题及参考答案免费

浙江大学计算机复试上机2005-2007

(由林子整理)

2005年浙江大学计算机学院考研复试上机试题及参考答案(1/5)

第一题:

A+B(10分)[结题]

题目要求:

读入两个小于100的正整数A和B,计算A+B。

需要注意的是:

A和B的每一位数字由对应的英文单词给出。

输入格式:

测试输入包含若干测试用例,每个测试用例占一行,格式为"A+B=",相邻两字符串有一个空格间隔。

当A和B同时为0时输入结束,相应的结果不要输出。

输出格式:

对每个测试用例输出1行,即A+B的值。

输入样例:

one+two=

threefour+fivesix=

zeroseven+eightnine=

zero+zero=

输出样例:

3

90

96

#include<>

#include<>

#include<>

#include<>

intmain(void)

{

constchardata[12][6]={"zero","one","two","three","four",

"five","six","seven","eight","nine","+","="};

unsigneda,b;/*转换后的表达式参数,如a+b(123+456)*/

unsignedi,j,k;/*临时变量,作为下标*/

charstr[100];/*输入字符串,足够大容量*/

chartemp[6];/*临时字符串,用于检索数字,如"one"->'1'*/

charresult[30];/*转换后的表达式参数,如"123+456="*/

do{

a=b=i=j=k=0;/*初始化变量*/

memset(str,0,sizeof(str));

memset(temp,0,sizeof(temp));

memset(result,0,sizeof(result));

gets(str);/*获取输入字符串,不能使用scanf,因为有空格*/

for(i=0,k=0;i

{

for(j=0;!

isspace(str[i])&&i

temp[j]=str[i];

temp[j]=0;/*字符串结束标记*/

for(j=0;j<12;j++)/*把这个单词转换为数字*/

if(strcmp(temp,data[j])==0)

{

if(j<=9)result[k++]=j+'0';

if(j==10)result[k++]='+';

if(j==11)result[k++]='=';

break;/*找到匹配数字就不必再搜索了*/

}

}

result[k]=0;/*字符串结束标记,result形式"123+456="*/

  sscanf(result,"%d+%d=",&a,&b);/*用sscanf来获得a,b的值*/

if(a==0&&b==0)break;/*A,B同时为零则退出程序*/

elseprintf("%d\n",a+b);/*打印输出A+B的数值*/

}while

(1);

return0;

}

 

2005年浙江大学计算机学院考研复试上机试题及参考答案(2/5)

第二题:

谁是开门关门的人(10分)

题目要求:

每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。

现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。

输入格式:

测试输入的第一行给出记录的总天数N(>0)。

下面列出了N天的记录。

每天的记录在第一行给出记录的条目数M(>0),下面是M行,每行的格式为

证件号码签到时间签离时间

其中时间按“小时:

分钟:

秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。

输出格式:

对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。

注意:

在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,

且没有多人同时签到或者签离的情况。

输入样例:

3

1

ME2532100:

00:

0023:

59:

59

2

EE30121808:

05:

3520:

56:

35

MA30113412:

35:

4521:

40:

42

3

CS30111115:

30:

2817:

00:

10

SC302123408:

00:

0011:

25:

25

CS30113321:

45:

0021:

58:

40

输出样例:

ME25321ME25321

EE301218MA301134

SC3021234CS301133

#include<>

#include<>

#include<>

typedefstruct

{

charid[16];/*证件号码长度不超过15位*/

charcometime[9];/*时间格式00:

00:

00*/

charleavetime[9];/*时间格式00:

00:

00*/

}Record;

intmain()

{

intN,M,i;/*记录的总天数N,每天记录的条目数M*/

Record*pTimeList;/*记录该天出入人员的证件号码、进入时间、离开时间*/

intfirst,last;/*记录每天开门的人和关门的人*/

scanf("%d",&N);/*读入记录的总天数*/

while(N--)

{

scanf("%d",&M);/*读入该天的进出人员数*/

pTimeList=(Record*)malloc(M*sizeof(Record));

for(i=0,first=0,last=0;i

{

scanf("%s%s%s",pTimeList[i].id,pTimeList[i]etime,pTimeList[i].leavetime);

if(i==0)

continue;

else

{

if(strcmp(pTimeList[first]etime,pTimeList[i]etime)>0)

first=i;

if(strcmp(pTimeList[last].leavetime,pTimeList[i].leavetime)<0)

last=i;

}

}/*fori*/

printf("%s%s\n",pTimeList[first].id,pTimeList[last].id);

free(pTimeList);

}/*forN*/

}

 

2005年浙江大学计算机学院考研复试上机试题及参考答案(3/5)

第三题:

分数统计(12分)

题目要求:

今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名。

给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印。

输入格式:

测试输入包含若干场考试的信息。

每场考试信息的第1行给出考生人数N(0

当读入的考生人数为0时,输入结束,该场考试不予处理。

输出格式:

对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔。

若有多名考生分数相同,则按他们考号的升序输出。

输入样例:

4525

1010121315

CS0043513

CS003524135

CS002212

CS0013235

1240

1030

CS00112

2320

101010

CS0000000000000000010

CS000000000000000002212

0

输出样例:

3

CS00360

CS00137

CS00437

0

1

CS00000000000000000220

#include<>

#include<>

#include<>

typedefstruct

{

charid[21];/*准考证号(<=20字符)*/

intscore;/*该考生总分*/

}StuInfo;

intmain()

{

intN,M,G,n;/*考生人数,题目数,分数线,上线考生数量*/

int*pMarkList;/*第1题至第M题的正整数分值*/

StuInfo*pStuinfo;/*考生信息*/

inti,j,k,a,b,c,m;/*临时变量*/

StuInfotmp;/*用于排序*/

while(scanf("%d",&N)&&N!

=0)/*读入考生人数N*/

{

scanf("%d%d",&M,&G);/*读入题目数量和分数线*/

pMarkList=(int*)malloc(M*sizeof(int));/*M道题目的分数*/

pStuinfo=(StuInfo*)malloc(N*sizeof(StuInfo));/*N个考生*/

for(i=0;i

scanf("%d",&(pMarkList[i]));

for(i=0,n=0;i

{

scanf("%s%d",&(pStuinfo[n].id),&m);/*准考证号,解出的题目数量m*/

for(pStuinfo[n].score=0,j=0;j

{

scanf("%d",&a);/*读入答对题的题号*/

pStuinfo[n].score+=pMarkList[a-1];/*因为题号是从1开始的;计算该考生的总分*/

}

if(pStuinfo[n].score>=G)/*如果考生上线则记录下来*/

n++;/*否则不予记录,便于排序*/

}

for(i=0;i

{

for(k=i,j=i+1;j

if(pStuinfo[j].score>pStuinfo[k].score)

k=j;

tmp=pStuinfo[k];

pStuinfo[k]=pStuinfo[i];

pStuinfo[i]=tmp;

}

for(i=0;i

{

/*统计相同分数考生人数k*/

for(k=1,j=i+1;j

{

if(pStuinfo[i].score==pStuinfo[j].score)

k++;

else

break;

}

/*下标i到i+k的考生分数相同,对这k个考生排序,升序*/

for(a=i;a<=i+k-1;a++)

{

for(c=a,b=a+1;b<=i+k;b++)

if(strcmp(pStuinfo[c].id,pStuinfo[b].id)>0)

c=b;

tmp=pStuinfo[a];

pStuinfo[a]=pStuinfo[c];

pStuinfo[c]=tmp;

}

}

printf("%d\n",n);/*排序完毕,按照要求输出,上线人数*/

for(i=0;i

printf("%s%d\n",pStuinfo[i].id,pStuinfo[i].score);

free(pMarkList);

free(pStuinfo);

}

return0;

}

 

2005年浙江大学计算机学院考研复试上机试题及参考答案(4/5)

第四题:

最大连续子序列(13分)

题目要求:

给定K个整数的序列{N1,N2,...,NK},其任意连续子序列可表示为{Ni,Ni+1,...,Nj},其中1<=i<=j<=K。

最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{-2,11,-4,13,-5,-2},其最大连续子序列为{11,-4,13},最大和为20。

在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该子序列的第一个和最后一个元素。

输入格式:

测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K(<10000),第2行给出K个整数,中间用空格分隔。

当K为0时,输入结束,该用例不被处理。

输出格式:

对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元素,中间用空格分隔。

如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。

若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。

输入样例:

6

-211-413-5-2

10

-101234-5-2337-21

6

5-83250

1

10

3

-1-5-2

3

-10-2

0

输出样例:

201113

1014

1035

101010

0-1-2

000

#include<>

#include<>

#include<>

intmain()

{

longintK,last;/*输入数据个数K<1000;最大子序列最后一个元素的下标last*/

longintThisSum,MaxSum,TmpMaxSum,index,*pList;

while(scanf("%d",&K)&&K)

{

ThisSum=0;

MaxSum=TmpMaxSum=last=LONG_MIN;

pList=(longint*)malloc(K*sizeof(longint));

for(index=0;index

{

scanf("%d",&(pList[index]));

ThisSum+=pList[index];

if(ThisSum>MaxSum)/*输入含有正数时,忽略最大子序列中首尾0的影响*/

{

MaxSum=ThisSum;/*更新MaxSum*/

if(MaxSum>TmpMaxSum)/*最大值更新时,更新最大子序列最后的数字*/

{/*保证最大子序列起始位置在输入串的最前面*/

TmpMaxSum=MaxSum;

last=index;

}

}

if(ThisSum<0)ThisSum=0;

}

/*tracebacktofindfirstnumberofthemaxsubsequence*/

for(TmpMaxSum=0,index=last;index>=0;index--)

{

TmpMaxSum+=pList[index];

if(TmpMaxSum==MaxSum)

break;

}

if(MaxSum<0)/*K个数字都是负数,定义最大和为0,输出首尾元素*/

printf("%ld%ld%ld\n",0,pList[0],pList[K-1]);

else

printf("%ld%ld%ld\n",MaxSum,pList[index],pList[last]);

free(pList);

}

return0;

}

 

2005年浙江大学计算机学院考研复试上机试题及参考答案(5/5)

第五题:

畅通工程(15分)

题目要求:

某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。

省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。

问最少还需要建设多少条道路

输入格式:

测试输入包含若干测试用例。

每个测试用例的第1行给出两个正整数,分别是城镇数目N(<1000)和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。

为简单起见,城镇从1到N编号。

当N为0时,输入结束,该用例不被处理。

输出格式:

对每个测试用例,在1行里输出最少还需要建设的道路数目。

输入样例:

42

13

43

33

12

23

52

12

35

9990

0

输出样例:

1

0

2

998

#include

#include

usingnamespacestd;

intn,visited[1024];

vector>connect(1024,vector(1024));

intdfs(inta)

{

inti;

visited[a]=1;

for(i=1;i<=n;i++)

if(connect[a][i]==1&&visited[i]==0)

dfs(i);

return(0);

}

intmain(intargc,char*argv[])

{

inti,j,a,b,count=-1;

intnumtown,numroad;

while(cin>>numtown&&numtown!

=0){

cin>>numroad;

n=numtown;

for(i=1;i<=numtown;i++)

for(j=1;j<=numtown;j++)

connect[i][j]=0;

for(i=1;i<=numtown;i++)

visited[i]=0;

for(i=1;i<=numroad;i++)

{

cin>>a>>b;

connect[a][b]=connect[b][a]=1;

}

for(j=1;j<=numtown;j++)

connect[i][j]=0;

for(i=1;i<=numtown;i++)

visited[i]=0;

for(i=1;i<=numroad;i++)

{

cin>>a>>b;

connect[a][b]=connect[b][a]=1;

}

for(i=1;i<=numtown;i++)

if(visited[i]==0)

{

dfs(i);

count++;

}

cout<

}

return0;

}

2006年浙江大学计算机学院考研复试上机试题及参考答案(1/5)

第一题:

A+B(16分)

题目要求:

读入两个小于10000的正整数A和B,计算A+B。

需要注意的是:

如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。

输入格式:

测试输入包含若干测试用例,每个测试用例占一行,格式为"ABK",相邻两数字有一个空格间隔。

当A和B同时为0时输入结束,相应的结果不要输出。

输出格式:

对每个测试用例输出1行,即A+B的值或者是-1。

输入样例:

121

11211

10882

36643

001

输出样例:

3

-1

-1

100

#include<>

#include<>

intmain(void)

{

unsignedinta,b,k;

unsignedcharch1[50],ch2[50];

 do{

 scanf("%d%d%d",&a,&b,&k);

 if(a==0&&b==0||k>8)break;

sprintf(ch1,"%d",a);sprintf(ch2,"%d",b);

strrev(ch1);strrev(ch2);

if(strlen(ch1)

if(strlen(ch2)

if(strncmp(ch1,ch2,k)==0)

printf("%d\n",-1);

else

printf("%d\n",a+b);

}while

(1);

return0;

}

 

2006年浙江大学计算机学院考研复试上机试题及参考答案(2/5)

2007-03-3121:

44:

14

大中小

第二题:

统计同成绩学生人数(12分)

题目要求:

读入N名学生的成绩,将获得某一给定分数的学生人数输出。

输入格式:

测试输入包含若干测试用例,每个测试用例的格式为

第1行:

N

第2行:

N名学生的成绩,相邻两数字用一个空格间隔。

第3行:

给定分数

当读到N=0时输入结束。

其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。

输出格式:

对每个测试用例,将获得给定分数的学生人数输出。

输入样例:

3

806090

60

2

8566

0

5

6075905575

75

0

输出样例:

1

0

2

#include<>

#include<>

intmain(void)

{

 unsignedN,score,num,i;

 unsignedpList[1000];

 do

 {

  scanf("%d",&N);

  if(N==0)break;

  for(i=0;i

  scanf("%d",&score);

  for(num=0,i=0;i

  printf("%d\n",num);

 }while

(1);

return0;

}

 

2006年浙江大学计算机学院考研复试上机试题及参考答案(3/5)

第三题:

火星A+B(7分)(Z

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

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2