华为2014校园招聘的机试题目

华为2014校园招聘的机试题目和2013年的完全一样。
一、题目描述(60分):
通过键盘输入一串小写字母(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打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响。
 

二、题目描述(40分):
通过键盘输入一串小写字母(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”

三、题目描述(50分): 
通过键盘输入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” 注:格式错误

[cpp] view plaincopy
  1. #include<stdio.h>  
  2. #include<string.h>  
  3. #include<stdlib.h>  
  4.   
  5. #define MAXCHAR 256  
  6.   
  7. void stringFilter(const char* pInputStr , long lInputLen , char* pOutputStr)  
  8. {  
  9.     bool hash[26] = {0};    //统计字符是否出现  
  10.     int i , j;  
  11.     for(i = 0 , j = 0 ; i < lInputLen; ++i)  
  12.     {  
  13.         if(false == hash[pInputStr[i] - 'a'])     //该字符还木有出现过  
  14.         {  
  15.             hash[pInputStr[i] - 'a'] = true;  
  16.             pOutputStr[j++] = pInputStr[i];  
  17.         }  
  18.     }  
  19.     pOutputStr[j] = '\0';  
  20. }  
  21.   
  22. void stringZip(const char* pInputStr , long lInputLen , char* pOutputStr)  
  23. {  
  24.     int i , j , k , num;  
  25.     char buffer[20];  
  26.     for(i = 0 , k = 0; i < lInputLen; )  
  27.     {  
  28.         num = 0;  
  29.         for(j = i + 1 ; j < lInputLen ; ++j)  
  30.         {  
  31.             if(pInputStr[i] == pInputStr[j])     //统计字符串中每个字符后面连续出现的重复字母次数  
  32.                 ++num;  
  33.             else  
  34.                 break;  
  35.         }//for  
  36.         if(0 != num)    //num可能是两位或三位或更多位的整数  
  37.         {  
  38.             memset(buffer , 0 , sizeof(buffer));  
  39.             itoa(num + 1 , buffer , 10);      //将整数按10进制转换为字符串  
  40.             strcpy(pOutputStr + k , buffer);  
  41.             k += strlen(buffer);  
  42.         }  
  43.         pOutputStr[k++] = pInputStr[i];  
  44.         i = i + num + 1;  
  45.     }//for  
  46.     pOutputStr[k] = '\0';  
  47. }  
  48.   
  49. void arithmetic(const char* pInputStr , long lInputLen , char* pOutputStr)  
  50. {  
  51.     int i , j , num1 , num2 , result , num_space;  
  52.     char buffer[4];  
  53.     bool add , sub;  
  54.     add = sub = false;  
  55.     for(i = 0 , num_space = 0 ; i < lInputLen ; ++i)  
  56.     {  
  57.         if(pInputStr[i] == ' ')  
  58.             ++num_space;  
  59.     }  
  60.     if(2 != num_space)     //空格数非法  
  61.     {  
  62.         pOutputStr[0] = '0';  
  63.         pOutputStr[1] = '\0';  
  64.         return ;  
  65.     }  
  66.     num1 = num2 = 0;  
  67.     for(i = 0 ; pInputStr[i] != ' ' ; ++i)  
  68.     {  
  69.         if(pInputStr[i] >= '0' && pInputStr[i] <= '9')  
  70.             num1 = num1 * 10 + pInputStr[i] - '0';  
  71.         else                 //第一个操作数中有非法字符  
  72.         {  
  73.             pOutputStr[0] = '0';  
  74.             pOutputStr[1] = '\0';  
  75.             return ;  
  76.         }  
  77.     }  
  78.     for(j = i + 1 ; pInputStr[j] != ' ' ; ++j);  
  79.     if(1 != j - i - 1)     //运算符长度不合法  
  80.     {  
  81.         pOutputStr[0] = '0';  
  82.         pOutputStr[1] = '\0';  
  83.         return ;  
  84.     }  
  85.     else    //操作符的长度为1  
  86.     {  
  87.         if('+' != pInputStr[i+1] && '-' != pInputStr[i+1])    //操作符号非法  
  88.         {  
  89.             pOutputStr[0] = '0';  
  90.             pOutputStr[1] = '\0';  
  91.             return ;  
  92.         }  
  93.         else  
  94.         {  
  95.             if('+' == pInputStr[i+1])  
  96.                 add = true;  
  97.             if('-' == pInputStr[i+1])  
  98.                 sub = true;  
  99.             for(i = j + 1 ; i < lInputLen ; ++i)  
  100.             {  
  101.                 if(pInputStr[i] >= '0' && pInputStr[i] <= '9')  
  102.                     num2 = num2 * 10 + pInputStr[i] - '0';  
  103.                 else          //第二个操作数中有非法字符  
  104.                 {  
  105.                     pOutputStr[0] = '0';  
  106.                     pOutputStr[1] = '\0';  
  107.                     return ;  
  108.                 }  
  109.             }//for  
  110.             if(add)  
  111.                 result = num1 + num2;  
  112.             else if(sub)  
  113.                 result = num1 - num2;  
  114.             memset(buffer , 0 , sizeof(buffer));  
  115.             itoa(result , buffer , 10);      //将整数按10进制转换为字符串  
  116.             strcpy(pOutputStr , buffer);  
  117.         }//esle  
  118.     }//else  
  119. }  
  120.   
  121.   
  122. int main(void)  
  123. {  
  124.     printf(" -- 2014年华为校园招聘机试题 (http://blog.csdn.net/hackbuteer1) --\n\n");  
  125.     char pInputStr1[] = {"aaabbbcccdde"};  
  126.     char pInputStr2[] = {"aaaaaaaaaaaabbcddddddddddddddddde"};  
  127.     char pInputStr3[] = {"3 + 4"};  
  128.     char pOutputStr1[MAXCHAR] = {0};  
  129.     char pOutputStr2[MAXCHAR] = {0};  
  130.     char pOutputStr3[MAXCHAR] = {0};  
  131.     stringFilter(pInputStr1 , strlen(pInputStr1) , pOutputStr1);  
  132.     stringZip(pInputStr2 , strlen(pInputStr2) , pOutputStr2);  
  133.     arithmetic(pInputStr3 , strlen(pInputStr3) , pOutputStr3);  
  134.     puts(pOutputStr1);  
  135.     puts(pOutputStr2);  
  136.     puts(pOutputStr3);  
  137.     return 0;  
  138. }  

原文地址:http://blog.csdn.net/hackbuteer1/article/details/11132567

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 命名空间

1. 什么是命名空间 在编程语言中&#xff0c;命名空间是一种特殊的作用域&#xff0c;它包含了处于该作用域中的所有标示符&#xff0c;而且其本身也是由标示符表示的。命名空间的使用目的是为了将逻辑相关的标示符限定在一起&#xff0c;组成相应的命名空间&#xff0c;可使整…

安装好hadoop集群后,报错如下n org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /data/hadoop-roo

master错误&#xff1a; n org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /data/hadoop-root-namenode-master.log._COPYING_ could only be replicated to 0 nodes instead of minReplication (1). There are 0 datanode(s) running and no node(s) ar…

hadoop学习1 java操作HDFS

1、创建目录 package hdfs.operation;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;public class MakeDir {public static void main(String[] args) throws IOExceptio…

hadoop学习2 记录配置hadoop环境的那些坑

1、在你的学习阶段&#xff0c;记住先关闭防火墙。 centos&#xff1a; systemctl stop firewalled.service2、windows本地配置eclipse&#xff0c;远程调测阶段&#xff1a;第一&#xff1a; 还是先关闭防火墙第二&#xff1a; 本地配置文件位置放对第三&#xff1a; 配置的时…

hadoop学习3 查找块的位置

1、hadoop会以块的形式存储在HDFS系统。通过命令可以查看所在节点和块的位置&#xff1a; [rootmaster softpackage]# hadoop fs -put scala-2.10.4.tgz /[rootmaster softpackage]# hadoop fsck /scala-2.10.4.tgz -files -locations -blocksDEPRECATED: Use of this script …

hadoop学习4 调测错误备案

0、An internal error occurred during: "Map/Reduce location status updater". java.lang.NullPointerException解决方法&#xff1a; 关闭防火墙1、Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Apps解决方…

hadoop学习5 搭建storm集群

参阅&#xff1a; http://www.cnblogs.com/freeweb/p/5179410.html 非常感谢 注意集群的启动顺序以及概念。 [rootmaster bin]# ./storm ui >> /dev/null & [4] 8076 [rootmaster bin]# jps 7930 nimbus 8076 core 3667 SecondaryNameNode 3480 NameNode 7626 Qu…

hadoop学习6 运行map reduce出错

1、一直处理running状态 2、 at com.sun.proxy.$Proxy14.submitApplication(Unknown Source) at org.apache.hadoop.yarn.client.api.impl.YarnClientImpl.submitApplication(YarnClientImpl.java:253) at org.apache.hadoop.mapred.ResourceMgrDelegate.submitApplication(Re…

kafka学习-环境搭建

1、几行命令 ./kafka-console-consumer.sh --zookeeper 192.168.86.133:2181,192.168.86.132:2181,192.168.86.134:2181 --topic shuaige --from-beginning ./kafka-console-producer.sh --broker-list 192.168.86.133:9092,192.168.86.132:9092,192.168.86.134:9092 --topic…

java基础之HashTable和HashMap的区别

1、类继承关系 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable …

java基础之ConcurrentHashMap

1、基础不牢固&#xff0c;请问接口里面怎么有方法&#xff1f; 这个和一般的方法有啥区别&#xff1f; public interface ConcurrentMap<K, V> extends Map<K, V> {/*** {inheritDoc}** implNote This implementation assumes that the ConcurrentMap cannot* con…

java基础之java内存模型

1、原子性 问题&#xff1a;i是原子性没&#xff1f; 不是&#xff01; 我理解原子性是针对计算机指令而言的&#xff0c;i包含读、加和写操作&#xff0c;包含三指令&#xff01; 除此之外&#xff0c;32位计算机读取64位的也不是原子性&#xff01; 2、有序性 并发时 可能…

Java基础之GC回收

非常好的文章&#xff0c;说明了GC的深入的东西 力荐&#xff01; GC是如何判断一个对象为"垃圾"的&#xff1f;被GC判断为"垃圾"的对象一定会被回收吗&#xff1f; http://blog.csdn.net/canot/article/details/51037938 JVM垃圾回收GC原理http://bl…

Eureka源码分析

Eureka源码分析 Eureka server入口: Spring.factories PS: 意味着如果加载EurekaServerAutoConfiguration成功,需要 ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)需加载成功. 通过Bean注入了很多类 本质上, eureka-server包含很多事件: EurekaInstanceC…

matlab程序中,如何解决矢量长度必须相同的问题

主要原因就是画图的x和y长度不一样&#xff0c;我用一个例子说明。 问题代码&#xff1a; clear all;close all;clc;x 0 : 1: 9;y sin(x);n 2*length(x);yi interpft(y, n);xi 0 : 0.5 : 10;hold on ;plot(x, y ,ro);plot(xi, yi, b.-);plot(x, sin(x),m--);legend(原始…

matlab 功率谱分析函数psd用法

psd简介 PSD(power spectrum analysis)功率谱分析&#xff0c;PSD在给定频带上的积分计算信号在该频带上的平均功率。与均值-平方谱相反&#xff0c;这个光谱中的峰值并没有反映出给定频率的能量。 单边PSD包含了信号的总功率在频率间隔从DC到一半的奈奎斯特速率。双侧PSD包含…

linux tar (打包、压缩、解压)命令

打包程序&#xff1a;tar c: 创建文档t&#xff1a; 列出存档内容x&#xff1a;提取存档f&#xff1a; filename 要操作的文档名v&#xff1a;详细信息 一&#xff1a;打包 打包&#xff1a;是指把文件整合在一起&#xff0c;不压缩 1.将文件打包&#xff1a;tar cf a.tar…

虚拟机添加硬盘扩容

1.设置→添加→硬盘 2.选择磁盘类型 3.开启虚拟机 4.用ls 命令查看&#xff1a;ls /dev/sd* 5.最后就可以对sdb进行分区操作 这里好麻烦&#xff0c;等我有空&#xff0c;在补上&#xff01; . . .

利用matlab将三维数据画成三维立体图

首先先分析对象。将数据利用matlab画出图&#xff0c;最开始是导入数据&#xff0c;然后处理数据&#xff0c;最后将处理的数据画出来。 所以我将它分为三个步骤。 第一步&#xff1a;导入数据 如果是mat数据。可以直接load如果是txt数据。可以用txtread如果是excel数据。可…

世界坐标、相机坐标、图像坐标、像素坐标的原理、关系,并用matlab仿真

世界坐标、相机坐标、图像坐标、像素坐标的原理、关系&#xff0c;并用matlab仿真 照相机是日常生活中最常见的。它能把三维的空间图片等比例缩小投影在照片上&#xff0c;称为一个二维图像。 以下我们就讲一讲原理&#xff0c;并相应的进行matlab仿真。 在学之前&#xff0…