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

合集下载

2017年计算机学院研究生复试上机考试真题

2017年计算机学院研究生复试上机考试真题

2017年硕士学位研究生招生复试上机试题考试科目: C语言与数据结构算法上机测试考试时间120分钟注意事项:1、源程序都在D:\TEST文件夹下,请先将该“TEST”文件夹改名为“准考证号_姓名”,其中准考证号是初试时的15位准考证号;2、考试结束后,首先删除VC++ 6.0自动生成的debug文件夹,然后使用压缩软件将上述考生文件夹中所有内容打包(包括里面所有文件,比如工程文件等。

除上述debug文件夹外,不得删除任何考试过程中产生的文件),文件名为“准考证号_姓名.rar”,然后将该文件通过教学系统的学生端的“传文件给教师”功能上传到服务器。

注意:文件上传后,需到监考老师处确认方可离开考场。

如果未经监考老师确认,并且文件由于某种原因上传未成功,考试成绩以0分计。

3、如果已经上传,需要修改然后再上传的,在压缩包的文件名后加编号2、3、4等,形如:“考号_姓名2.rar”、“考号_姓名3.rar”。

在监考老师处确认时,请求监考老师将老文件删除。

4、所有提供的文件(包括C源文件),不得更改文件名,也不得更改其内部结构(详见题目中的红字)。

5、所有程序需要在VC++6.0环境中运行,结果正确方可。

比如,程序填空,不能仅将空填好,而是需要运行程序,进行测试,确保正确。

6、本考试共包括1道程序改错、2道程序填空、3道程序编写题,分数分别为:20、 15、 15、 15、15、20。

7、考试题文字描述见下,C程序见考生文件夹下相应文件。

(1) 给定程序modi.c中,函数fun的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止(该项不包括在结果中):例如,程序运行后,输入0.0001,则程序输出3.1414。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!(2) 给定程序blank1.c中,函数fun的功能是:找出100至x(x≤999)之间各位上的数字之和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。

浙江大学复试面试题目及答案(yyy版本)

浙江大学复试面试题目及答案(yyy版本)

浙江大学计算机考研历年面试问题集专业部分操作系统部分:1 windows/linux使用的文件系统?windows使用的文件系统有:FAT(包括FAT12,FAT16,FAT32),CDFS,UDF,NTFS,DFS(分布式文件系统,用于windows2000/xp服务器上的网络组件)linux使用的文件系统有:ext2,ext3,FAT32 ???????2 虚拟内存?传输协调工作,并为用户提供一个统一的界面和标准的接口,用户通过这一界面实现所需要的从操作以及使用系统资源,使系统中的若干台计算机相互协作以完成共同的任务,有效控制和协调诸任务的并行执行,并向系统提供统一的,有效的接口软件集合。

网络操作系统和分布式操作系统虽然都属于管理分布在不同地理位置上的操作系统,但最大的差别是:网络操作系统工作时必须确认网址,而分布式操作系统则不必知道计算机的确切地址;分布式系统负责整个系统的资源分配,通常能够很好的隐藏系统的内部细节,如对象的物理位置,并发控制,系统故障等。

这些对用户都是透明的。

8 操作系统为什么要用驱动程序?参考912 io调度算法?此题似乎有问题,分解之:IO控制方式:程序IO方式,中断驱动IO控制方式,DMA直接存储器访问方式,IO通道控制方式磁盘调度算法:RSS(随机调度),FIFO,PRI(进程优先级调度),LIFO,SSTF(最短作业优先),SCAN (在磁盘上往复),C-SCAN(一条道路,快速返回),N-step- SCAN(一次N个记录的SCAN),FSCAN13 一个文件重命名和把它直接删除后再重新建立新文件名有何不同?1.物理地址:前者不变,后者变化2.pcb:前者只改了文件名,后者重新建立PCB14 介绍一下os的层次结构?●多数据流:文件的实际内容被当作字节流处理,在NTFS中可以为一个文件定义多个数据流;●通用索引功能:NTFS中,每个文件都有一组属性与之关联.这样,文件管理系统中文件描述的集合组织成一个关系数据库,因而文件可以建立关于任何属性的索引.20 轮转法知道么,用在什么系统?简单介绍下分时操作系统,时间片可等长——简单轮转调度,亦可不等长——多级反馈调度数据结构部分:1 介绍分治算法,回溯算法,动态规划法?弃,其余儿子节点被加入到活节点表中。

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

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

浙江大学计算机复试上机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 =three four + five six =zero seven + eight nine =zero + zero =输出样例:39096#include <>#include <>#include <>#include <>int main(void){const char data[12][6] = {"zero", "one","two", "three", "four","five", "six", "seven", "eight", "nine", "+", "="};unsigned a, b; /* 转换后的表达式参数,如a+b(123+456) */unsigned i, j, k; /* 临时变量,作为下标*/ char str[100]; /* 输入字符串,足够大容量*/ char temp[6]; /* 临时字符串,用于检索数字,如"one"->'1' */char result[30]; /* 转换后的表达式参数,如"123+456=" */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<strlen(str); ++i){for(j=0;!isspace(str[i])&&i<strlen(str);++i,++j) /* 提取一个单词 */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同时为零则退出程序 */else printf("%d\n", a + b); /* 打印输出 A + B 的数值 */}while(1);return 0;}2005年浙江大学计算机学院考研复试上机试题及参考答案(2/5)第二题:谁是开门关门的人?(10分)题目要求:每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。

浙大远程学院计算机机试题

浙大远程学院计算机机试题

说明两点:(1)根据安排,参加统考的学生要去你所在的学习中心参加半天模拟环境的练习(里面有真题),各学习中心会安排通知的。

(2)统考上机操作部分占60%,复习准备时请首先练习我们曾经考过的机试题(如下),这里包括的还是比较全面的。

如果理论部分和这里的上机部分全做过了,再打开Test3做四份统考全真试卷。

我想这样就差不多了。

祝大家好运!浙江大学继续教育学院机试题说明:务必请在E:盘(或D:)的根目录下建立KS目录,然后把考试的相关内容拷贝到该目录下。

相关内容包括:试卷文档、待操作的文件和文件夹。

考试完毕及时在机器上批改打分,并按学院要求上报成绩。

一.Windows操作题1.在KS目录有一个“Windows题”文件夹,按以下要求完成操作:(1)在“Windows题”文件夹下建立“图片1”和“user1”文件夹。

(2)在“Windows题”文件夹下搜索(或查找)所有的扩展名为rar文件,并将它们移动到“图片1”文件夹中。

(提示:首先确认在“Windows题”文件夹下,然后使用工具栏中的“搜索”按钮,别用“开始→搜索”菜单。

再提示一点,扩展名为rar文件可写为:*.rar )。

(3)将“图片1”文件夹设置为“隐藏”。

(4)打开“Windows题”文件夹下的Program文件夹,将其中的“张三.zip”、“李四.zip”、“王五.zip”三个文件复制到“user1”文件夹中,最后将user1文件夹的快捷方式放到桌面上,快捷方式名为user1(提示一点,只要在user1上单击鼠标右键,选择“发送到”→“桌面快捷方式”,然后更改名称即可)。

(5)将“Windows题”下light文件夹更名为bright。

(6)将“Windows题”下test文件夹删除。

(7)打开bright文件夹,新建一名为“简历.txt”文本文件,输入内容为:销售报告,最后保存并关闭记事本窗口。

在本目录下复制“简历.txt”,并更名为“简历.DAT”。

浙江大学10年计算机上机题(含答案)

浙江大学10年计算机上机题(含答案)

一、A+B题目描述:给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。

现在请计算A+B的结果,并以正常形式输出。

输入:输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。

输出:请计算A+B的结果,并以正常形式输出,每组数据占一行。

样例输入:-234,567,890 123,456,7891,234 2,345,678样例输出:-1111111012346912答案:给大家记住数据吧,如果你是用高进度计算的。

注意:你的结果是否有前缀0;0是否带负号;999 110,000 -90 0-0 -00 -01999 1010,001 -10,000#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string>using namespace std;int main(){string strA,strB;while(cin>>strA>>strB){long numA = 0;for(int i=0; i<=strA.length()-1; i++){if(strA[i] <= '9' && strA[i] >= '0'){numA = numA*10 + strA[i] - '0';}}long numB = 0;for(int//去掉否则出现变量重复i=0; i<=strB.length()-1; i++) {if(strB[i] <= '9' && strB[i] >= '0'){numB = numB*10 + strB[i] - '0';}}if(strA[0] != '-' && strB[0] != '-')//++cout<<numA+numB<<endl;if(strA[0] != '-' && strB[0] == '-')//+-cout<<numA-numB<<endl;if(strA[0] == '-' && strB[0] != '-')//-+cout<<numB-numA<<endl;if(strA[0] == '-' && strB[0] == '-')//--cout<<0-(numA+numB)<<endl;}return 0;}已AC1.//可以用sscanf把字符串转换为int,然后直接加就可以了2.#include <iostream>3.#include <cstdio>4.#include <cstring>5.ing namespace std;7.8.const int Maxn = 50;9.int main()10.{11. char str1[Maxn],str2[Maxn];12. char temp[Maxn];13. int a,b,i,r;14. while(scanf("%s%s",str1,str2)!=EOF)15. {16. int len = strlen(str1);17. memset(temp,0,sizeof(temp));18. r = 0;19. for(i = 0; i<len; i++)20. if(str1[i]!=',')temp[r++] = str1[i];21. sscanf(temp,"%d",&a);22. memset(temp,0,sizeof(temp));23. r = 0;24. for(i = 0; i<strlen(str2); i++)25. if(str2[i]!=',')temp[r++] = str2[i];26. sscanf(temp,"%d",&b);27. cout<<a+b<<endl;28. }29. return 0;30.31.}1.#include<stdio.h>2.#include<stdlib.h>3.int sw(char *a){4. int i=0,c=0;5. while(a[i]){6. if(a[i]>='0'&&a[i]<='9')7. c=c*10+a[i]-'0';8. i++;9. }10. if(a[0]=='-')11. c=-c;12. return c;13.}14.int main(){15. char a[99],b[99];16. int a1,b1,c[99],i=0;17. while(scanf("%s %s",a,b)!=EOF){18. a1=sw(a);19. b1=sw(b);20.21. c[i]=a1+b1;22. i++;}23. for(int j=0;j<i;j++)24. printf("%d\n",c[j]);25. return 0;26.}复制代码AC了二、ZOJ问题题目描述:对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。

计算机考研考试题目及答案

计算机考研考试题目及答案

计算机考研考试题目及答案计算机考研考试是广大计算机专业毕业生追求深造的重要途径之一。

通过考研,学生有机会进入优质的学术研究机构或者深入实践的科研岗位。

在这篇文章中,我们将为大家提供一些常见的计算机考研题目及其答案,希望能对正在备战考研的同学们有所帮助。

第一部分:数据结构1. 什么是数据结构?答案:数据结构是计算机存储、组织和管理数据的方式。

它涉及到各种数据类型,如数组、链表、栈、队列、树、图等,并提供了一系列操作这些数据类型的操作方法。

2. 请说明数组和链表的区别。

答案:数组是一种线性数据结构,其中的元素在内存中是连续存储的,可以通过索引访问。

链表是通过指针连接起来的节点构成的,节点在内存中可以是离散的,每个节点都包含了下一个节点的指针。

3. 请解释一下栈和队列的特点。

答案:栈是一种后进先出(LIFO)的数据结构,只允许从栈顶进行插入和删除操作。

队列是一种先进先出(FIFO)的数据结构,允许在队尾插入元素,在队首删除元素。

第二部分:操作系统1. 什么是进程和线程?答案:进程是指在计算机上运行的程序的实例,每个进程都有自己的内存空间和资源。

线程是进程中的执行单元,一个进程可以包含多个线程,共享进程的资源。

2. 解释一下死锁。

答案:死锁是指两个或多个进程在互斥、占有、等待和不可剥夺资源等条件下,无法向前推进的状态。

在死锁中,每个进程都在等待其他进程释放资源,因此无法继续执行。

3. 什么是虚拟内存?答案:虚拟内存是操作系统提供给应用程序的一种抽象概念,它使得应用程序认为自己拥有连续的可用内存空间,而实际上这个空间可能是分散存储于物理内存和硬盘上的。

第三部分:数据库1. 请解释关系数据库和非关系数据库的区别。

答案:关系数据库使用表格的形式组织数据,表格由行和列组成,通过事先定义的模式进行数据管理。

非关系数据库通常不使用表格,而是使用键值对、文档、图等方式组织数据。

2. 什么是SQL?答案:SQL(Structured Query Language)是一种用于管理关系数据库的编程语言。

浙江大学计算机学院2007年考研复试上机题

浙江大学计算机学院2007年考研复试上机题

浙江大学计算机学院2007年考研复试上机题题目要求:给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。

长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。

具体的输入输出格式规定如下:输入格式:测试输入包含若干测试用例,每个测试用例由一系列坐标组成,每对坐标占一行,其中|x|和|y|小于231;一对0 坐标标志着一个测试用例的结束。

注意(0, 0)不作为任何一个测试用例里面的点。

一个没有点的测试用例标志着整个输入的结束。

输出格式:对每个测试用例,在1行内输出2对整数,其间用一个空格隔开。

第1对整数是长方形框左下角的坐标,第2对整数是长方形框右上角的坐标。

输入样例:12 5623 5613 100 012 340 00 0输出样例:12 10 23 5612 34 12 34-----------------------------------------------------------------------#include <iostream>using namespace std;int main(){int x1,y1,x2,y2,x,y;while(cin>>x>>y&&(x||y)){x1=x2=x; y1=y2=y;while(cin>>x>>y&&(x||y))x1=x1<x?x1:x,y1=y1<y?y1:y,x2=x2>x?x2:x,y2=y2>y?y2:y;cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<endl;}return 0;}Time limit: 1 SecondsTotal Submit: 820 Accepted Submit: 199题目要求:统计一个给定字符串中指定的字符出现的次数具体的输入输出格式规定如下:输入格式:测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串。

浙江大学05计算机上机题

浙江大学05计算机上机题

一、A + B题目描述:读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出.输入:测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.输出:对每个测试用例输出1行,即A+B的值.样例输入:one + two =three four + five six =zero seven + eight nine =zero + zero =样例输出:39096答案:#include <iostream>#include <string>using namespace std;int toInteger(string A){if(A=="one")return 1;else if(A=="two")return 2;else if(A=="three")return 3;else if(A=="four")return 4;else if(A=="five")return 5;else if(A=="six")return 6;else if(A=="seven")return 7;else if(A=="eight")return 8;else if(A=="nine")return 9;else if(A=="zero")return 0;elsereturn -1;}int main(){string s[1000];int i=0;while(cin>>s[i]){if(s[i]=="="&&s[i-1]=="zero"&&s[i-3]=="zero")break;i++;}for(int j=0;j!=i;){int num1=0,num2=0;int sum=0;while(s[j]!="+"){if(toInteger(s[j])==-1)return 0;elsenum1=num1*10+toInteger(s[j]);j++;}j++;while(s[j]!="="){if(toInteger(s[j])==-1)return 0;elsenum2=num2*10+toInteger(s[j]);j++;}j++;sum=num1+num2;if(sum==0)return 0;cout<<sum<<endl;}return 1;}之二:#include<stdio.h>#include<string.h>int StoInt(char s[]){if(strcmp(s,"zero")==0) return 0;if(strcmp(s,"one")==0) return 1;if(strcmp(s,"two")==0) return 2;if(strcmp(s,"three")==0) return 3;if(strcmp(s,"four")==0) return 4;if(strcmp(s,"five")==0) return 5;if(strcmp(s,"six")==0) return 6;if(strcmp(s,"seven")==0) return 7;if(strcmp(s,"eight")==0) return 8;if(strcmp(s,"nine")==0) return 9;}int main(){char a[50],b[50];int a1[10],b1[10],top1=-1,top2=-1,i,a2,b2;while(scanf("%s",a)!=EOF){if(strlen(a)==1&&a[0]=='+'){while(scanf("%s",b)!=EOF){if(strlen(b)==1&&b[0]=='='){a2=b2=0;for(i=0;i<=top1;i++){a2=a2*10+a1;}for(i=0;i<=top2;i++){b2=b2*10+b1;}if(a2==b2&&a2==0){break;}else{top1=top2=-1;printf("%d\n",a2+b2);break;}}else{b1[++top2]=StoInt(b);}}}else a1[++top1]=StoInt(a);if(a2==b2&&a2==0) break;}return 0;}AC代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浙江大学计算机复试上机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 =three four + five six =zero seven + eight nine =zero + zero =输出样例:39096#include <>#include <>#include <>#include <>int main(void){const char data[12][6] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "+", "="};unsigned a, b;/* 转换后的表达式参数,如a+b(123+456)*/ unsigned i, j, k;/* 临时变量,作为下标*/char str[100];/* 输入字符串,足够大容量*/char temp[6];/* 临时字符串,用于检索数字,如"one"->'1'*/char result[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<strlen(str); ++i){for(j=0;!isspace(str[i])&&i<strlen(str);++i,++j) /* 提取一个单词*/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同时为零则退出程序*/else printf("%d\n", a + b);/* 打印输出A + B 的数值*/}while(1);return 0;}2005年浙江大学计算机学院考研复试上机试题及参考答案(2/5) 第二题:谁是开门关门的人(10分)题目要求:每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。

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

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

下面列出了N天的记录。

每天的记录在第一行给出记录的条目数M ( > 0 ),下面是M行,每行的格式为证件号码签到时间签离时间其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。

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

注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况。

输入样例:31ME25321 00:00:00 23:59:59 2EE301218 08:05:35 20:56:35 MA301134 12:35:45 21:40:42 3CS301111 15:30:28 17:00:10 SC3021234 08:00:00 11:25:25 CS301133 21:45:00 21:58:40输出样例:ME25321 ME25321EE301218 MA301134SC3021234 CS301133#include <>#include <>#include <>typedef struct{char id[16];/* 证件号码长度不超过15位*/char cometime[9];/* 时间格式00:00:00 */char leavetime[9];/* 时间格式00:00:00 */}Record;int main(){int N, M, i;/* 记录的总天数N,每天记录的条目数M */ Record *pTimeList;/* 记录该天出入人员的证件号码、进入时间、离开时间*/int first, last;/* 记录每天开门的人和关门的人*/scanf("%d",& N);/* 读入记录的总天数*/while(N--){scanf("%d", & M);/* 读入该天的进出人员数*/pTimeList = (Record *)malloc(M*sizeof(Record));for(i=0,first=0,last=0; i<M; ++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;}} /* for i */printf("%s %s\n", pTimeList[first].id, pTimeList[last].id);free(pTimeList);} /* for N */}2005年浙江大学计算机学院考研复试上机试题及参考答案(3/5) 第三题:分数统计(12分)题目要求:今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名。

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

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

每场考试信息的第1行给出考生人数N ( 0 < N < 1000 )、考题数M ( 0 < M < = 10)、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号(题目号由1到M)。

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

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

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

输入样例:4 5 2510 10 12 13 15CS004 3 5 1 3CS003 5 2 4 1 3 5CS002 2 1 2CS001 3 2 3 51 2 4010 30CS001 1 22 3 2010 10 10CS000000000000000001 0 CS000000000000000002 2 1 2 0输出样例:3CS003 60CS001 37CS004 371CS000000000000000002 20 #include <>#include <>#include <>typedef struct{char id[21];/* 准考证号(<=20字符)*/int score;/* 该考生总分*/}StuInfo;int main(){int N, M, G, n;/* 考生人数,题目数,分数线,上线考生数量*/ int *pMarkList;/* 第1题至第M题的正整数分值*/StuInfo *pStuinfo;/* 考生信息*/int i,j,k,a,b,c,m;/* 临时变量*/StuInfo tmp;/* 用于排序*/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<M; ++i)/* 读入M题每题分数*/scanf("%d", & (pMarkList[i]) );for(i=0, n=0; i<N; ++i)/* 读入N个考生信息,i用于计数N次,cnt用于计算上线考生记录*/{scanf("%s%d", & (pStuinfo[n].id), &m);/* 准考证号,解出的题目数量m */for(pStuinfo[n].score=0,j=0; j<m; ++j) /* 读入答出的m题的题号*/{scanf("%d", & a ); /* 读入答对题的题号*/pStuinfo[n].score += pMarkList[ a-1 ]; /* 因为题号是从1开始的;计算该考生的总分*/}if(pStuinfo[n].score >= G)/* 如果考生上线则记录下来*/n++; /* 否则不予记录,便于排序*/}for(i=0; i<n-1; ++i)/* 输入完毕,对上线考生先按分数排序,降序*/{for(k=i, j=i+1; j<n; ++j)if(pStuinfo[j].score > pStuinfo[k].score)k = j;tmp = pStuinfo[k];pStuinfo[k] = pStuinfo[i];pStuinfo[i] = tmp;}for(i=0; i<n; i+=k) /* 相同总分考生再按照准考证号排序*/ {/* 统计相同分数考生人数k */for(k=1,j=i+1; j<n; ++j){if(pStuinfo[i].score == pStuinfo[j].score)k++;elsebreak;}/* 下标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<n; ++i)/* 和每个上线考生的准考证号和总分数*/ printf("%s %d\n",pStuinfo[i].id,pStuinfo[i].score);free(pMarkList);free(pStuinfo);}return 0;}2005年浙江大学计算机学院考研复试上机试题及参考答案(4/5)第四题:最大连续子序列(13分)题目要求:给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,Nj },其中 1 <= i <= j <= K。

相关文档
最新文档