浙大计算机学院考研复试上机试题及参考答案(免费)
- 格式:doc
- 大小:108.00 KB
- 文档页数:67
浙江大学计算机复试上机2005-2007
(由林子整理QQ:170479150)
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 =
输出样例:
3
90
96
#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 { 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同时为零则退出程序 */ 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空格分隔。 注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前, 且没有多人同时签到或者签离的情况。 输入样例: 3 1 ME3021112225321 00:00:00 23:59:59 2 EE301218 08:05:35 20:56:35 MA301134 12:35:45 21:40:42 3 CS301111 15:30:28 17:00:10 SC3021234 08:00:00 11:25:25 CS301133 21:45:00 21:58:40 输出样例: ME3021112225321 ME3021112225321 EE301218 MA301134 SC3021234 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--)