华为校园招聘上机笔试题和面试题答案(一)

新高考网

  上机时间两小时,3道题

  1 字串转换

  问题描述:

  将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。

  要求实现函数:

  void convert(char *input,char* output)

  【输入】 char *input , 输入的字符串

  【输出】 char *output ,输出的字符串

  【返回】 无

  示例

  输入:char*input="abcd"

  输出:char*output="bcde"

  输入:char*input="abbbcd"

  输出:char*output="bcdcde"

  void convert(char *input,char *output)

  {

  char c='\0';

  int tag=0;

  int len=strlen(input);

  for(int i=0;i

  {

  if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1

  {

  output[i]=(input[i]-'a'+1)%26+'a';

  c=input[i];

  tag=1;

  }else

  {

  if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同

  {

  output[i]=(input[i]-'a'+2)%26+'a';

  c='\0';

  tag=0;

  }else//当前字符与前一个字符相等,且前面已有2n个字符相同。则按第一次出现算

  {

  output[i]=(input[i]-'a'+1)%26+'a';

  c=output[i];

  tag=1;

  }

  }

  }

  }

  void convert(char *input,char *output)

  {

  char c='\0';

  int tag=0;

  int len=strlen(input);

  for(int i=0;i

  {

  if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1

  {

  output[i]=(input[i]-'a'+1)%26+'a';

  c=input[i];

  tag=1;

  }else

  {

  if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同

  {

  output[i]=(input[i]-'a'+2)%26+'a';

  c='\0';

  tag=0;

  }else//当前字符与前一个字符相等,且前面已有2n个字符相同。则按第一次出现算

  {

  output[i]=(input[i]-'a'+1)%26+'a';

  c=output[i];

  tag=1;

  }

  }

  }

  }

中国点击率最高的一篇文章 !