zoukankan      html  css  js  c++  java
  • 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” 注:格式错误

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    #define MAXCHAR 256
    
    void stringFilter(const char* pInputStr , long lInputLen , char* pOutputStr)
    {
    	bool hash[26] = {0};    //统计字符是否出现
    	int i , j;
    	for(i = 0 , j = 0 ; i < lInputLen; ++i)
    	{
    		if(false == hash[pInputStr[i] - 'a'])     //该字符还木有出现过
    		{
    			hash[pInputStr[i] - 'a'] = true;
    			pOutputStr[j++] = pInputStr[i];
    		}
    	}
    	pOutputStr[j] = '';
    }
    
    void stringZip(const char* pInputStr , long lInputLen , char* pOutputStr)
    {
    	int i , j , k , num;
    	char buffer[20];
    	for(i = 0 , k = 0; i < lInputLen; )
    	{
    		num = 0;
    		for(j = i + 1 ; j < lInputLen ; ++j)
    		{
    			if(pInputStr[i] == pInputStr[j])     //统计字符串中每一个字符后面连续出现的反复字母次数
    				++num;
    			else
    				break;
    		}//for
    		if(0 != num)    //num可能是两位或三位或很多其它位的整数
    		{
    			memset(buffer , 0 , sizeof(buffer));
    			itoa(num + 1 , buffer , 10);      //将整数按10进制转换为字符串
    			strcpy(pOutputStr + k , buffer);
    			k += strlen(buffer);
    		}
    		pOutputStr[k++] = pInputStr[i];
    		i = i + num + 1;
    	}//for
    	pOutputStr[k] = '';
    }
    
    void arithmetic(const char* pInputStr , long lInputLen , char* pOutputStr)
    {
    	int i , j , num1 , num2 , result , num_space;
    	char buffer[4];
    	bool add , sub;
    	add = sub = false;
    	for(i = 0 , num_space = 0 ; i < lInputLen ; ++i)
    	{
    		if(pInputStr[i] == ' ')
    			++num_space;
    	}
    	if(2 != num_space)     //空格数非法
    	{
    		pOutputStr[0] = '0';
    		pOutputStr[1] = '';
    		return ;
    	}
    	num1 = num2 = 0;
    	for(i = 0 ; pInputStr[i] != ' ' ; ++i)
    	{
    		if(pInputStr[i] >= '0' && pInputStr[i] <= '9')
    			num1 = num1 * 10 + pInputStr[i] - '0';
    		else                 //第一个操作数中有非法字符
    		{
    			pOutputStr[0] = '0';
    			pOutputStr[1] = '';
    			return ;
    		}
    	}
    	for(j = i + 1 ; pInputStr[j] != ' ' ; ++j);
    	if(1 != j - i - 1)     //运算符长度不合法
    	{
    		pOutputStr[0] = '0';
    		pOutputStr[1] = '';
    		return ;
    	}
    	else    //操作符的长度为1
    	{
    		if('+' != pInputStr[i+1] && '-' != pInputStr[i+1])    //操作符号非法
    		{
    			pOutputStr[0] = '0';
    			pOutputStr[1] = '';
    			return ;
    		}
    		else
    		{
    			if('+' == pInputStr[i+1])
    				add = true;
    			if('-' == pInputStr[i+1])
    				sub = true;
    			for(i = j + 1 ; i < lInputLen ; ++i)
    			{
    				if(pInputStr[i] >= '0' && pInputStr[i] <= '9')
    					num2 = num2 * 10 + pInputStr[i] - '0';
    				else          //第二个操作数中有非法字符
    				{
    					pOutputStr[0] = '0';
    					pOutputStr[1] = '';
    					return ;
    				}
    			}//for
    			if(add)
    				result = num1 + num2;
    			else if(sub)
    				result = num1 - num2;
    			memset(buffer , 0 , sizeof(buffer));
    			itoa(result , buffer , 10);      //将整数按10进制转换为字符串
    			strcpy(pOutputStr , buffer);
    		}//esle
    	}//else
    }
    
    
    int main(void)
    {
    	printf(" -- 2014年华为校园招聘机试题 (http://blog.csdn.net/hackbuteer1) --
    
    ");
    	char pInputStr1[] = {"aaabbbcccdde"};
    	char pInputStr2[] = {"aaaaaaaaaaaabbcddddddddddddddddde"};
    	char pInputStr3[] = {"3 + 4"};
    	char pOutputStr1[MAXCHAR] = {0};
    	char pOutputStr2[MAXCHAR] = {0};
    	char pOutputStr3[MAXCHAR] = {0};
    	stringFilter(pInputStr1 , strlen(pInputStr1) , pOutputStr1);
    	stringZip(pInputStr2 , strlen(pInputStr2) , pOutputStr2);
    	arithmetic(pInputStr3 , strlen(pInputStr3) , pOutputStr3);
    	puts(pOutputStr1);
    	puts(pOutputStr2);
    	puts(pOutputStr3);
    	return 0;
    }

    转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/11132567

  • 相关阅读:
    未来中国最热门的十大职业排行榜
    中国金融牌照18种(内附各牌照注册条件)
    现有的一些人脸数据库
    广信科教集团
    省部级干部list
    解读Google分布式锁服务
    数学算法那些事
    细数二十世纪最伟大的十大算法
    链接分析算法之:HillTop算法
    Regex Failure
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4344134.html
Copyright © 2011-2022 走看看