zoukankan      html  css  js  c++  java
  • 华为2014机试题(一)

    过几天就要进行华为的机试了,今儿临时抱抱佛脚,在网上找到2014届华为校招的机试题,琢磨了一会儿,贴出来记录下。

    首先感谢一下Hackbuteer提供的题目:http://blog.csdn.net/hackbuteer1/article/details/11132567

    对于第一题,字符过滤。最简单也是最直接的就是HASH。题目规定了输入序列只能为小写字符'a~z'。因此直接开辟一个大小为26的数组用于记录当前字符是否已经出现即可。

    需要注意的问题:

    1. hash数组记得初始化

    2. pOutputStr为字符指针,记得在结尾‘’。以免stackoverflow。

        保险起见,可以在函数起始对pOutputStr初始化,memset(pOutputStr,0,sizeof(pOutputStr));

    第二题 字符串压缩,整理题意之后,就是将连续出现的字符进行个数统计,如果大于1,则先将重复长度输出,然后将该字符输出。

    需要注意的问题:

    1. 某个重复字符的长度可能超过10,甚至1000,考虑itoa。

        char buffer[1000];

      memset(buffer,0,sizeof(buffer));

      itoa(num,buffer,10);

    2. 如果某字符并未重复,即个数为1,不需要在pOutputStr中输出‘1X’, 'X'--表示该字符。

    3. pOutputStr 结尾。

    第三题 我的思路和Hackbuteer不太一样,我的思路倾向于流程控制,写的有点冗余。

     1 void setOutput(char *pOutputStr)
     2 {
     3     pOutputStr[0]='0';
     4     pOutputStr[1]='';
     5 }
     6 void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)
     7 {
     8      /**********************************************************************
     9       *valid input string:
    10       *|[left operator][left space][Operation][right space][right operator]|   
    11       ***********************************************************************/
    12 
    13     // Fnum--left operator;  Fspace-- Format ensurrance
    14     // Op-- operation, +/- ;  
    15     // Sspace-- Format ensurrance; Snum--right operator;
    16     bool Fnum,Fspace,Op,Sspace,Snum;
    17     Fnum=Fspace=Op=Sspace=Snum=false;
    18 
    19     int i=0,num1=0,num2=0,mark=0;
    20     char buffer[100];
    21         
    22     memset(pOutputStr,0,sizeof(pOutputStr));
    23 
    24     // get first num
    25     while(i<lInputLen && pInputStr[i]>='0'&& pInputStr[i]<='9')
    26     {
    27         if(Fnum==false) Fnum=true;
    28         num1 = num1*10 + pInputStr[i] -'0';
    29         i++;
    30     }
    31     if(Fnum==false || i==lInputLen)
    32     {
    33         setOutput(pOutputStr);
    34         return;
    35     }
    36     //get first space
    37     if(pInputStr[i]== ' ')
    38     {
    39         if(Fspace == false) Fspace=true;
    40         i++;
    41     }
    42     if(Fspace==false || i==lInputLen)
    43     {
    44         setOutput(pOutputStr);
    45         return;
    46     }
    47     // get operator +/-
    48     if(pInputStr[i]== '+'|| pInputStr[i]=='-')
    49     {
    50         if(Op == false) Op=true;
    51         if(pInputStr[i]=='+') mark=1;
    52         else mark=2;
    53         i++;
    54     }
    55     if(Op==false || i==lInputLen)
    56     {
    57         setOutput(pOutputStr);
    58         return;
    59     }
    60     // get second space
    61     if(pInputStr[i]== ' ')
    62     {
    63         if(Sspace == false) Sspace=true;
    64         i++;
    65     }
    66     if(Sspace==false || i==lInputLen)
    67     {
    68         setOutput(pOutputStr);
    69         return;
    70     }
    71     // get second num
    72     while(i<lInputLen && pInputStr[i]>='0'&& pInputStr[i]<='9')
    73     {
    74         if(Snum==false) Snum=true;
    75         num2 = num2*10 + pInputStr[i] -'0';
    76         i++;
    77     }
    78     if(Snum==false || i<lInputLen)
    79     {
    80         setOutput(pOutputStr);
    81         return;
    82     }
    83     if(mark==1) num1+=num2;
    84     else num1-=num2;
    85     memset(buffer,0,sizeof(buffer));
    86     itoa(num1,buffer,10);
    87     strcpy(pOutputStr,buffer);
    88 }    

    转载请注明出处: http://www.cnblogs.com/double-win/ 谢谢!

  • 相关阅读:
    cygwin配合NDK开发Android程序
    和菜鸟一起学c之函数指针
    和菜鸟一起学android4.0.3源码之SD卡U盘等自动挂载配置
    Android系统的开机画面显示过程分析
    android编译系统的makefile文件Android.mk写法
    Linux下makefile教程
    和菜鸟一起学linux之本地git中心仓库建立
    强人总结的Windows XP实用技巧45条(一)
    Webshell下自动挂马的ASP
    多进程Telnet的木马例子
  • 原文地址:https://www.cnblogs.com/double-win/p/3811567.html
Copyright © 2011-2022 走看看