试题做的很匆忙,不能保证完全正确。代码也没加注释,以后有时间需要慢慢改进。
2013年华为软件校园招聘编程测验
类别:软件C/C++语言
编程题(共3题)
注意:
1、请上机编写程序,按题目要求提交文件。[详见考试说明,点击进入考试说明]
2、本试题采用自动执行测试用例进行评分,测试用例不对考生公开
3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。两者相同则得分,不同则不得分
4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况,题目中注明的例外
5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误
6、被要求实现的函数如果包含返回参数,该返回参数涉及的空间分配和释放均在函数外完成,在被要求实现函数内部可以直接使用返回参数
7、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分
8、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并
实现下一题目
1 字串转换
问题描述:
将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
要求实现函数:
int convert(char *input ,char* output)
【输入】 char *input , 输入的字符串
【输出】 char *output ,输出的字符串
【返回】 无
示例
输入:char *input="abcd"
输出:char *output="bcde"
输入:char *input="abbbcd"
输出:char *output="bcdcde"
此为流程图,首先遍历数组中每个元素,如果第二个元素等于第一个元素、或者元素位置第3、4.。。。。。。。。。等,如果其与前一个元素相等,而与前一个个元素的前一个元素不等,则将其转化为前一个元素转化的结果加1.即output[i]=output[i-1]+1;其他情况下output[i] = input[i]+1,当然如果input[i] = 'z',则output[i]= 'a',这种情况要注意。
#include <iostream> using namespace std; const int N = 300; int convert(char *input, char* output) { int i, len = strlen(input); for (i = 0; i < len; i++){ if ((i == 1 && input[i] == input[i-1]) || (i > 1 && input[i] == input[i-1] && input[i] != input[i-2])){ output[i] = ((output[i-1] - '0') + 1)+'0'; }else if (input[i] == 'z'){ output[i] = 'a'; }else{ output[i] = ((input[i] - '0') + 1)+'0'; } } output[i] = '\0'; return 0; } int main() { char input[N],output[N]; cin>>input; convert(input, output); cout<<output<<endl; return 0; }