2012年华为校园招聘电子科大面试题---之我的解法

2024-01-13 01:32

本文主要是介绍2012年华为校园招聘电子科大面试题---之我的解法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

@smilestone322

以下是我的解法,写出来跟大家交流,欢迎大家讨论,呵呵:

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"

 

 我的源码如下:

#include "stdlib.h"
#include <string>
using namespace std;

int convert(char *input,char* output)
{
     char ibegin,iend;
     int output_len=0;
     if((input==NULL)||(output==NULL))
     {
         return -1;
     }

     while(*(input)!='\0')
     {

    ibegin=*input;
         iend=*(input+1);
         if(iend!='\0')
         {
              if(ibegin!=iend)           //相邻两个字符不相等
              {
                   if(ibegin!='z')
                   {
                       *(output+output_len)=ibegin+1;

                   }else
                   {
                       *(output+output_len)='a';
                   }

                   input=input+1;
                   output_len+=1;

              }else
              {
                   *(output+output_len)=ibegin+1;
                   output_len+=1;
                   *(output+output_len)=ibegin+2;
                   input=input+2;
                  output_len+=1;
              }

         }else
         {
              if(ibegin!='z')
              {
                   *(output+output_len)=ibegin+1;

              }else
              {
                   *(output+output_len)='a';
              }

              output_len+=1;
              input=input+1;
         }
     }

     *(output+output_len)='\0';
     return 0;
}


int _tmain(int argc, _TCHAR* argv[])
{
     char In[20]="abbbcd";
     char *Out=(char *)malloc(strlen(In)+1);
     convert(In,Out);
     printf("out is%s\n",Out);
     free(Out);
    return 0;

}

 

大家如果有更好的解题算法,也不防告诉我,呵呵!大家多交流,学习!


菜鸟java解法如下,刚学java见笑。

import java.lang.String;
import java.io.*;
import java.lang.StringBuilder;public class ConvertString {public String StringConvert(String strSrc) {String strResult = "";StringBuilder sb = new StringBuilder (strResult);char iBegin, iEnd;//int len = strSrc.length();char[] cResult = new char[len];int index = 0;if (0 == len) {return strResult;}// 获取字符串中的每个字符int nLen = len;while (nLen > 0) {//iBegin = strSrc.charAt(index);if (index != (len - 1)) {// 取下一个字符iEnd = strSrc.charAt(index + 1);// 前后两个字符不相等if (iBegin != iEnd) {//if (iBegin != 'z') {sb.insert(index, (char)(iBegin+1));cResult[index] = (char) (iBegin + 1);} else {sb.insert(index, 'a');cResult[index] = 'a';}index++;nLen--;} else {// 前后2个字符相等if (iBegin != 'z') {sb.insert(index, (char)(iBegin+1));cResult[index] = (char) (iBegin + 1);if (iBegin + 1 == 'z') {sb.insert(index+1,'a');cResult[index + 1] = 'a';} else {sb.insert(index+1,(char)(iBegin+2));cResult[index + 1] = (char) (iBegin + 2);}} else {// zsb.insert(index,'a');sb.insert(index+1,'b');cResult[index] = 'a';cResult[index + 1] = 'b';}index += 2;nLen = nLen - 2;}} else {// iBegin是最后一个字符if (iBegin != 'z') {sb.insert(index, (char)(iBegin+1));cResult[index] = (char) (iBegin + 1);} else {sb.insert(index, 'a');cResult[index] = 'a';}index++;nLen--;}}// 赋值给strResult//strResult = String.valueOf(cResult);  strResult=sb.toString();return strResult;}public static void main(String[] args) {String strSrc = "zz";String strDst;ConvertString strReverse = new ConvertString();strDst = strReverse.StringConvert(strSrc);if (strDst != "") {System.out.println(strDst);}}
}


 

2)2 字符串处理转换
问题描述:   
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降

序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出

空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
void my_word(charinput[], char output[])
【输入】  char input[], 输入的字符串
【输出】  char output[],输出的字符串
【返回】 无
示例
输入:charinput[]="some local buses, some1234123drivers" ,
输出:charoutput[]="drivers local buses some"
输入:charinput[]="%A^123 t 3453i*()" ,
输出:charoutput[]=""

 

 我的解题源码如下:

#include "stdafx.h"
#include "stdlib.h"
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

typedef struct {
     int string_len;
     string str;
}word;

bool is_a_char(char c_char)
{

     //判断是否为合法的单词中的字符
     if((c_char>='a'&&c_char<='z')||(c_char>='A'&&c_char<='Z'))      //合法的单词
     {
         return true;
     }else
     {
         return false;
     }
}


bool WordSortByLength( const word &v1, const word &v2)

     if(v1.string_len>v2.string_len)
     {
         //
         return true;
     }else
     {
         return false;
     }
}

void WordSort(std::vector<word> & vec)
{
     std::sort(vec.begin(),vec.end(),WordSortByLength);
}

 

//比较单词是否有重复
bool exist_word(word vword,std::vector<word> & vec)
{
     //
     bool bret=false;
     std::vector<word> ::iterator iter;
     for(iter=vec.begin();iter!=vec.end();iter++)
     {

         //比较两个字符串是否相同
         if(vword.str==iter->str)
         {
              bret=true;
              break;
         }
     }

     return bret;
}

void my_word(constchar input[], char output[])
{
     char cbegin;
     int input_len=0;
     int ibegin=0,iend=0;
     word ptmp;
     std::vector<word>::iterator iter ;   //迭代器
     std::vector <word> l_word;           //vector容器

     while(input[input_len]!='\0')            //未达到字符串末尾
     {

         cbegin=input[input_len];
         if(is_a_char(cbegin))      //合法的单词
         {

              ibegin=input_len;
              iend=input_len+1;
              while(is_a_char(input[iend]))
              {
               iend=iend+1;
              }

              if(iend>(ibegin+1))
              {
                   //为合法的单词,插入容器
                   std::string str(input+ibegin,input+iend);
                   ptmp.str=str;
                   if(!exist_word(ptmp,l_word))
                   {
                       ptmp.string_len=iend-ibegin;
                       l_word.push_back(ptmp);
                   }

                   input_len+=ptmp.string_len;
              }else
              {
                   //只有一个字母,必须跳过该字母
                   input_len+=1;
              }
         }else
         {
              //不合法的字母,跳过
              input_len+=1;
         }
     }

     //对容器里面的单词根据长度排序
     WordSort(l_word);
     input_len=0;

     for(iter=l_word.begin();iter!=l_word.end();iter++)
     {
         memcpy(output+input_len,iter->str.c_str(),iter->string_len);
         input_len+=iter->string_len;
         output[input_len]=0x20;              //补空格的ASII
         input_len+=1;
     }

     //将最后一个空格修改成'\0'
     output[input_len]='\0';
     //
     return;

}


int _tmain(int argc, _TCHAR* argv[])
{
     char charinput[]="some local buses, some1234123drivers";
     char *charoutput=(char *)malloc(strlen(charinput)+1);
     my_word(charinput,charoutput);

     printf("input:%s\n",charinput);
     printf("output:%s\n",charoutput);
     return 0;

}

 
大家去执行吧,呵呵!

这篇关于2012年华为校园招聘电子科大面试题---之我的解法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599807

相关文章

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`

Laravel 面试题

PHP模块 PHP7 和 PHP5 的区别,具体多了哪些新特性? 性能提升了两倍 结合比较运算符 (<=>) 标量类型声明 返回类型声明 try…catch 增加多条件判断,更多 Error 错误可以进行异常处理 匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义 …… 了解更多查看文章底部链接 PHP7 新特性 为什么 PHP

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位