浙江大学计算机复试上机2005-2007
(由林子整理 )
2005年浙江大学计算机学院考研复试上机试题及参考答案(1/5)
第一题:A+B(10分) [结题]
题目要求:读入两个小于100的正整数A和B,计算A+B。
需要注意的是:A和B的每一位数字由对应的英文单词给出。
输出格式:对每个测试用例输出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<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分)
题目要求:每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录出当天开门和关门的人。
发布评论