2013华为校园招聘机试题9月10日题(杭州)

简介:

2013华为校园招聘机试题9月10日题(杭州):

机试题目及解答来源:http://blog.chinaunix.net/uid-26868581-id-3334342.html

题目部分:

复制代码
复制代码
 1 /*
 2 
 3 题目描述(60分):
 4 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
 5 比如字符串“abacacde”过滤结果为“abcde”。
 6  
 7 要求实现函数: 
 8 void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
 9  
10 【输入】 pInputStr:  输入字符串
11          lInputLen:  输入字符串长度         
12 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
13  
14 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
15  
16 示例 
17 输入:“deefd”        输出:“def”
18 输入:“afafafaf”     输出:“af”
19 输入:“pppppppp”     输出:“p”
20 */
21  
22 /* main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出*/
23 /* 当前你可以使用其他方法测试,只要保证最终程序能正确执行即可 */
24 /* 该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响*/
25  
26 /*
27 题目描述(40分):
28 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
29 压缩规则:
30 1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
31 2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
32  
33 要求实现函数: 
34 void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
35  
36 【输入】 pInputStr:  输入字符串
37          lInputLen:  输入字符串长度         
38 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
39  
40 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
41  
42 示例 
43 输入:“cccddecc”   输出:“3c2de2c”
44 输入:“adef”     输出:“adef”
45 输入:“pppppppp” 输出:“8p”
46 */
47  
48 /*
49 题目描述(50分): 
50 通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
51 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
52  
53 补充说明:
54 1. 操作数为正整数,不需要考虑计算结果溢出的情况。
55 2. 若输入算式格式错误,输出结果为“0”。
56  
57 要求实现函数: 
58 void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
59  
60 【输入】 pInputStr:  输入字符串
61          lInputLen:  输入字符串长度         
62 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
63  
64 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
65  
66 示例 
67 输入:“4 + 7”  输出:“11”
68 输入:“4 - 7”  输出:“-3”
69 输入:“9 ++ 7”  输出:“0” 注:格式错误
70 */
复制代码
复制代码

 

解答:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXCHAR 256
 
//必须规定均为小写字母
void  stringFilter( const  char  *pInputStr,  long  lInputLen,  char  *pOutputStr)
{
     int  a[26] = {0};
     int  pos = 0;
     long  i, j;
     const  char  *p = pInputStr;
     for (i = 0, j = 0; i < lInputLen; i++)
     {
         pos = pInputStr[i] -  'a' //将出现的字符标记为1,下次出现同样的字符时就不再存储
         if (a[pos] == 0)
         {
             a[pos]++;
             pOutputStr[j++] = pInputStr[i];
         }
     }
 
     pOutputStr[j] =  '\0' ;
}
 
void  stringZip( const  char  *pInputStr,  long  lInputLen,  char  *pOutputStr)
{
     int  i, j, k = 0, cnt = 0;
     char  buffer[30];
     
     for (i = 0; i < lInputLen;)
     {
         for (j = i + 1;;j++)
         {
             if (pInputStr[j] == pInputStr[i])
                 cnt++;
             else
                 break ;
         }
         
         if (cnt != 0)
         {
             memset (buffer, 0,  sizeof (buffer));
             itoa(cnt + 1, buffer, 10);
             strcat (pOutputStr, buffer);
             k +=  strlen (buffer);
             i += cnt;
         }
         pOutputStr[k++] = pInputStr[i++];
         cnt = 0;
     }
}
 
void  arithmetic( const  char  *pInputStr,  long  lInputLen,  char  *pOutputStr)
{
     int  i, cnt = 0, a, b, result;
     char  ch[1] = { '0' };
     char  op1[MAXCHAR], op[MAXCHAR], op2[MAXCHAR], buffer[4];
     for (i = 0; i < lInputLen; i++)
         if (pInputStr[i] ==  ' ' )
             cnt++;
     
     if (cnt != 2)                     //空格数不等于2
     {
         strcat (pOutputStr, ch);
         return ;
     }
         
     sscanf (pInputStr,  "%s %s %s" , op1, op, op2);
 
     if ( strlen (op) > 1 || (op[0] !=  '+'  && op[0] !=  '-' ))         // 操作符有多个
     {
         strcat (pOutputStr, ch);
         return ;
     }
     
     for (i = 0; i <  strlen (op1); i++)                             //操作数1是否有其他字符
     {
         if (op1[i] <  '0'  || op1[i] >  '9' )
         {   
             strcat (pOutputStr, ch);
             return ;
         }
     }
         
     
     for (i = 0; i <  strlen (op2); i++)                             //操作数2是否有其他字符
     {
         if (op2[i] <  '0'  || op2[i] >  '9' )
         {
             strcat (pOutputStr, ch);
             return ;
         }
     }
     
     a =  atoi (op1);
     b =  atoi (op2);
     
     switch (op[0])
     {
         case  '+' :
             result = a + b;
             itoa(result, buffer, 10);
             strcat (pOutputStr, buffer);
             break ;
         case  '-' :
             result = a - b;
             itoa(result, buffer, 10);
             strcat (pOutputStr, buffer);
             break ;
         default :
             break ;
     }
}
 
int  main()
{
     char  pInputStr1[] = { "aaabbbcccdde" };
     char  pInputStr2[] = { "aaabbcddde" };
     char  pInputStr3[] = { "3 + 4" };
     char  pOutputStr1[MAXCHAR] = {0};
     char  pOutputStr2[MAXCHAR] = {0};
     char  pOutputStr3[MAXCHAR] = {0};
 
     /* TODO: 调用被测函数 */
     stringFilter(pInputStr1,  strlen (pInputStr1), pOutputStr1);
     stringZip(pInputStr2,  strlen (pInputStr2), pOutputStr2);
     arithmetic(pInputStr3,  strlen (pInputStr3), pOutputStr3);
 
     /* TODO: 执行完成后可比较是否是你认为正确的值 */
     printf (pOutputStr1);  //abcde
     printf (pOutputStr2);  //3a3b3c2de
     printf (pOutputStr3);  //7
     return ;
}

 





本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3292798.html,如需转载请自行联系原作者

目录
相关文章
阿里云秋季2024届校园招聘正式启动!
阿里云秋季2024届校园招聘已于8月28日正式启动,欢迎投递!
阿里云秋季2024届校园招聘已开启,等你来投!
阿里云秋季2024届校园招聘已开启,等你来投!
866 0
|
安全
码上公益 | 迎难而上,为失依儿童搭建数字求助专线
福建省教育援助协会想对失依儿童项目做数字化管理的想法由来已久,但因为预算、人力等原因一直没能实现。码上公益的爱心极客倪春风,10天内独自完成了失依儿童求助申请管理系统的开发,用技术的力量完成了这次爱心传递。
208 0
码上公益 | 迎难而上,为失依儿童搭建数字求助专线
|
物联网 程序员 API
全球最大校园Hackathon:失败后,你能学到什么?
全世界最大的校园Hackathon(编程马拉松)要属宾夕法尼亚大学的PennApps了,它是一个持续40小时的编程大赛。本学期的PennApps于2013年1月18日-20日举行,有来自世界各地超过450名学生参加比赛,大赛总奖金为2万5千美金。今年的冠军团队来自加州大学伯克利分校,他们得到了4000美元的奖金。[注:参赛作品和获奖名单可参看PennApps官方说明。]
181 0
全球最大校园Hackathon:失败后,你能学到什么?
|
Serverless 数据库 开发者
云开发校园合伙人招募令|阿里实习生直通面试名额等你来PICK!
长假漫漫,宅家宅到压力山大。云开发平台喊你出道啦!首批云开发校园大使将面向所有对Serverless和云开发感兴趣的在校大学生进行招募。蜕变是青春必修课,别再犹豫,不负青春,乘风破浪。成为校园KOL,C位出道,带领Serverless云开发校园爱好者玩转云开发。一飞冲天吧,少年!10个阿里实习生直通面试名额、1000件阿里云飞天代码T-shirt、1000张代金券等通关奖励等你来PICK,现在报名即领优酷VIP会员卡!
3788 0
云开发校园合伙人招募令|阿里实习生直通面试名额等你来PICK!
下一篇
无影云桌面