华为笔试算法题汇总

 更新时间:2020年4月25日 17:25  点击:1948

本文为大家分享了华为2014笔试4道算法题,供大家参考,具体内容如下

1.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

比如字符串“abacacde”过滤结果为“abcde”。

要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】 pInputStr:  输入字符串
                 lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例 

输入:“deefd”        输出:“def”
输入:“afafafaf”     输出:“af”
输入:“pppppppp”     输出:“p”

main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。

一定要保证编译运行不受影响

//////////////////////////////////////////////////////////////////////////华为第一题 19:19-19:36 17分钟 
#include <iostream> 
#include <cassert> 
 
using namespace std; 
 
bool g_flag[26]; 
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr) 
{ 
 assert(pInputStr != NULL); 
 int i = 0; 
 if (pInputStr == NULL || lInputLen <= 1) 
 { 
  return; 
 } 
 const char *p = pInputStr; 
 while(*p != '\0') 
 { 
  if (g_flag[(*p - 'a')]) 
  { 
   p++; 
  }else{ 
   pOutputStr[i++] = *p; 
   g_flag[*p - 'a'] = 1; 
   p++; 
  } 
 } 
 pOutputStr[i] = '\0'; 
} 
int main() 
{ 
 memset(g_flag,0,sizeof(g_flag)); 
 char input[] = "abacacde"; 
 char *output = new char[strlen(input) + 1]; 
 stringFilter(input,strlen(input),output); 
 cout<<output<<endl; 
 delete output; 
 return 0; 
} 

2.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

压缩规则:

1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。

要求实现函数: 

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】 pInputStr:  输入字符串
            lInputLen:  输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例 

输入:“cccddecc”   输出:“3c2de2c”
输入:“adef”     输出:“adef”
输入:“pppppppp” 输出:“8p”

//////////////////////////////////////////////////////////////////////////华为第二题 19:40 - 20:10 中间耽误3分钟 
#include <iostream> 
#include <cassert> 
 
using namespace std; 
 
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) 
{ 
 const char *p = pInputStr; 
 int num = 1; 
 int i = 0; 
 p++; 
 while(*p != NULL) 
 { 
  while(*p == *(p-1)&& *p != NULL) 
  { 
  num++; 
  p++; 
  } 
  if (num > 1) 
  { 
   int size = 0; 
   int temp = num; 
   while(num)    //计算位数 
   { 
    size++; 
    num /= 10; 
   } 
   num = 1; 
 
   for (int j = size; j > 0; j--) 
   { 
    pOutputStr[i+j-1] = '0'+ temp%10; 
    temp /= 10; 
   } 
   i +=size; 
   pOutputStr[i++] = *(p-1); 
   p++; 
  }else{ 
   pOutputStr[i++] = *(p-1); 
   p++; 
  } 
 } 
 pOutputStr[i] = '\0'; 
} 
 
int main() 
{ 
 char input[] = "cccddecc"; 
 char *output = new char[strlen(input) + 1]; 
 stringZip(input,strlen(input),output); 
 cout<<output<<endl; 
 return 0; 
} 

3.通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。

输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。

补充说明:

1、操作数为正整数,不需要考虑计算结果溢出的情况。
2、若输入算式格式错误,输出结果为“0”。

要求实现函数: 
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】 pInputStr:  输入字符串
            lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例 
输入:“4 + 7”  输出:“11”
输入:“4 - 7”  输出:“-3”
输入:“9 ++ 7”  输出:“0” 注:格式错误

//////////////////////////////////////////////////////////////////////////华为第三题 20:29 - 20:40 
#include <iostream> 
 
using namespace std; 
 
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr) 
{ 
 const char *input = pInputStr; 
  char *output = pOutputStr; 
 int sum = 0; 
 int operator1 = 0; 
 int operator2 = 0; 
 char *temp = new char[5]; 
 char *ope = temp; 
 while(*input != ' ') //获得操作数1 
 { 
  sum = sum*10 + (*input++ - '0'); 
 } 
 input++; 
 operator1 = sum; 
 sum = 0; 
 
 while(*input != ' ') 
 { 
  *temp++ = *input++; 
 } 
 
 input++; 
 *temp = '\0'; 
 
 if (strlen(ope) > 1 ) 
 { 
  *output++ = '0'; 
  *output = '\0'; 
  return; 
 } 
 
 while(*input != '\0') //获得操作数2 
 { 
  sum = sum*10 + (*input++ - '0'); 
 } 
 operator2 = sum; 
 sum = 0; 
 
 switch (*ope) 
 { 
 case '+':itoa(operator1+operator2,pOutputStr,10); 
  break; 
 case '-':itoa(operator1-operator2,pOutputStr,10); 
 break; 
 default: 
  *output++ = '0'; 
  *output = '\0'; 
  return; 
 } 
} 
 
int main() 
{ 
 char input[] = "4 - 7"; 
 char output[] = " "; 
 arithmetic(input,strlen(input),output); 
 cout<<output<<endl; 
 return 0; 
} 

4.输入1--50个数字,求出最小数和最大数的和

//华为2014年机试题1:输入1--50个数字,求出最小数和最大数的和 
//输入以逗号隔开 
#include<stdio.h> 
#define N 50 
void sort(int a[],int n); 
int main(void) 
{ 
 
 
 char str[100]; 
 int a[N]={0}; 
 gets(str);  //要点1:动态的输入1--50个整数,不能确定个数,只能用字符串输入,然后分离出来 
 int i=0; 
 int j=0; 
 int sign=1; 
 while(str[i]!='\0') 
 { 
  if(str[i]!=',') //输入时要在半角输入 
  { 
 
   if(str[i] == '-') //要点:2:有负整数的输入 
   { 
    // i++; //易错点1 
    sign=-1; 
   } 
   else if(str[i]!='\0') //不用else的话,负号也会减去‘0' 
   { 
    a[j]=a[j]*10 + str[i]-'0'; //要点3:输入的可以是多位数 
 
   } 
  } 
  i++; 
  if(str[i]==',' || str[i]=='\0') //这个判断是在i自加以后 
  { 
    a[j]=a[j]*sign; //易错点2 
    sign=1; ////易错点3 
    j++; //j就是a数组的个数 范围0到j-1 
  } 
 
 
 } 
 
 sort(a,j); 
 printf("Max number + Min number = %d",a[0]+a[j-1]); 
 
 return 0; 
} 
void sort(int a[],int n) //选择排序 
{ 
 int i,j; 
 int k; 
 int temp; 
 for(i=0;i<n-1;i++) 
 { 
  k=i; 
  for(j=i+1;j<n;j++) 
  { 
   if(a[k]>a[j]) 
    k=j; 
  } 
  if(i!=k) 
  { 
   temp = a[k]; 
   a[k] = a[i]; 
   a[i] = temp; 
  } 
 } 
 for(i=0;i<n;i++) 
  printf("%-5d",a[i]); 
 puts(""); 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。

[!--infotagslink--]

相关文章

  • 华为手机怎么开启双时钟? 华为添加双时钟的技巧

    华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
  • 华为畅享20Pro配置怎么样?华为畅享20Pro参数配置分析

    华为畅享20Pro配置怎么样?对于即将上市的华为畅享20 Pro手机,很多的网友们也是相当关注的,大家都想要知道这款华为畅享20 Pro手机的配置到底怎么样,赶紧看看吧...2020-06-29
  • 余承东:华为不会一夜之间搞10万家线下店

    70分57秒,华为Mate9系列发布上,余承东一直都是抑制不住的笑着,直到Mate9保时捷版本8999元的公布。余承东说在国内4000元档国产手机中,华为是卖得最好,也是首先能够突破4000元的。这次华为甚至突破了苹果的价格,飙至9000元。...2016-11-22
  • 华为将携HiLink智能家居生态成果重磅亮相2017AWE

    3月9日-11日,以“智慧生活尽在AWE”为主题的2017年中国家电及消费电子博览会(AWE)将在上海新国际博览中心(SNIEC) 举行。届时,华为将携HiLink智能家居生态成果亮相。华为消费者业务首席战略官邵洋还将在AWE开幕式上发表主题演讲,并与方太集团、海尔集团、京东集团、博西家电四家企业的相关负责人共同出席“中国家电发展高峰论坛”,就如何打造“智慧生活”以及“人工智能在智能家居中的应用”进行探讨交流。...2017-07-06
  • 华为开始通过亚马逊在美国销售MediaPad平板电脑

    凤凰科技讯 北京时间11月17日消息,据外媒报道,华为周三宣布,将开始通过亚马逊在美国销售其MediaPad平板电脑。...2016-11-22
  • 华为Mate9怎么设置个人隐私空间 华为Mate9隐私空间用法介绍

    好友来借机?短信、视频、文件担心被泄露,不借?面子事儿大,借?别担心,设置属于您自己的隐私空间,在隐私空间存放的数据只对自己开放,即使手机丢失,别人也无法获取。那么华为Mate...2016-12-15
  • 华为与苹果互换专利说明了什么

    你相信华为开始向苹果收取专利许可使用费吗?前不久,深圳市召开2016年知识产权工作会议,会议发布了“深圳市2015年度知识产权十大事件”,其中,华为苹果相互专利许可一事被列入其中。...2016-07-04
  • 三星发力5G,欲追诺基亚华为杀入全球前三

    北京时间6月21日下午消息,三星高管表示,通过迅速开拓美国等市场,三星希望成为全球排名前三的5G技术厂商。此前,由于在无线技术标准方面的押注失误,三星在电信设备市场落后于竞争对手。...2016-07-04
  • 比高通、OPPO快1倍:华为如何引领智能手机充电速度

    从充电速度来看,荣耀 Magic 无疑是目前充电最快的手机,并且比同类产品速度快了近乎 1 倍。荣耀 Magic 仅仅只是华为石墨烯锂电池技术的首秀。...2016-12-31
  • 华为mate40手机AI字幕功能如何使用?华为手机AI字幕功能使用教程

    华为mate40手机上网功能有许多,在本文中介绍的则是它的ai字幕功能的使用,它的操作方法十分的简单,有兴趣的朋友可以参考本文...2020-12-08
  • 华为如何做到永不卡顿?一分钟视频看懂华为EMUI 5.0

    华为的EMUI 5.0不但是国内第一个基于安卓7.0的新系统,界面、功能彻底重新设计,还独创了Machine Learning智能感知学习系统,从底层全面优化原生安卓,解决安卓越用越卡顿的问题,号称18个月连续使用也不会卡顿,那么是怎么做到的,下面我们来看看吧...2016-12-15
  • 华为插线板开卖!149元支持独家快充

    今天,华为正式上架了自家的插线板产品,在华为商城以及天猫华为旗舰店均可购买,售价为 149 元。...2016-09-28
  • 华为U8950D怎么解锁

    有朋友问我华为U8950D怎么解锁呢,下面我以图文的形式给大家详细介绍U8950D解锁的 教程有需要学习的机友可进入参考。 1、我们通过官网进入解锁网站,然后同意再点&...2016-09-20
  • 华为荣耀6怎么插卡?荣耀6sim卡安装方法步骤图文详解

    华为荣耀6怎么插卡?接下来小编就为大家介绍荣耀6sim卡安装方法步骤图文详解,有兴趣的朋友可以看一下...2020-06-29
  • 华为南科大本科生年薪曝光:首年20万彻底不淡定了!

    作为目前全球通信一哥,且发展势头良好,华为已成为不少相关专业大学生考虑民营科技类企业求职的重要选择。...2016-11-01
  • 华为录音机在哪? 华为录音机裁剪音频的教程

    华为录音机在哪?华为手机自带了录音机,想要使用录音机剪辑音频录音,该怎么剪辑呢?下面我们就来看看华为录音机裁剪音频的教程,需要的朋友可以参考下...2020-06-29
  • 又一三星前高管加入华为 三星高层:"能少挖点么"

    京华时报讯(记者古晓宇)昨天记者了解到,华为任命何鸿略为华为消费者业务大中华区副总裁,分管港澳台地区的终端业务,之前其曾是三星电子的高管。...2016-08-27
  • 华为Mate9怎么开启智能遥控 华为Mate9使用智能遥控教程

    本篇文章介绍了如何使用华为mate9来开启智能遥控的方法,很方便快捷,有需要的朋友快来学习一下吧。 华为Mate9的功能还是不少的,其中有个智能遥控功能,知道如何使用吗?...2016-12-31
  • 华为手机有哪些实用功能 华为手机实用功能详细介绍

    华为手机有哪些实用功能?大家都知道华为手机在我们国内一直是我们国产安卓机的龙头老大,在很多方面都做的数一数二,它的系统做的也是非常的不错,里面也有许多实用的功能。华为作为国内安卓龙头,它的系统EMUI有什么特色和一些实用的功能?一起来看看吧...2020-06-29
  • 华为p8如何使用指关节截屏? 华为p8指关节截屏正确使用方法

    本篇文章介绍了华为p8的指关节截屏方法,正使用同款手机的朋友可以来了解一下。 首先咱们要进设置>智能辅助>更多>智能截屏>开启智能截屏功能,然后就可以开始装逼了...2017-01-22