2012华为校园招聘机试(武汉)


选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数judge_type[] 里存储与score[] 数组对应的评委类别

judge_type[i]== 1,表示专家评委,

judge_type[i]== 2,表示大众评委,

n表示评委总数。

打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 * 0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分= 专家评委平均分,总分取整。函数最终返回选手得分。

 函数接口  int cal_score(int score[], int judge_type[], int n) 

 2、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

      例如:input[] = {3, 6, 1, 9, 7}   output[] = {3, 7,9, 6, 1};  

              input[] = {3, 6, 1,9, 7, 8}    output[] = {1, 6, 8, 9, 7, 3}

 3、操作系统任务调度问题。操作系统任务分为系统任务用户任务两种。

系统任务的优先级 < 50

用户任务的优先级 >= 50 <= 255

优先级大于255的为非法任务,应予以剔除。

现有一任务队列task[] ,长度为ntask中的元素值表示任务的优先级,数值越小,优先级越高。

函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。

      例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40,99}    system_task[] = {0, 3, 1, 7, -1}   user_task[] = {4, 8, 2, 6, -1}

函数接口    void scheduler(int task[], int n, int system_task[],int user_task[])

 

第一题:比较一个数组的元素 是否为回文数组

 

第二题:求两个数组的和差   就是去掉两个数组中相同的元素 然后将两个数组中的元素存放在一个新的数组中  且数组A中元素要在B数组元素之前

第三题:比较汗  求简单的四则运算,  参与运算的数字只有0--9

 

逆序单链表

 

第三题【50分】:判定德州扑克的牌型。给5张牌,返回它的牌型,

4个的,3个+对子,顺子,3个+2个单张散牌,2对+散牌,1对+散牌,其他。

 

上午是输入一个数组,然后找出哪个比平均值大
下午是链表的reverse

1. 数组比较(20分)

• 问题描述:

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。

请编程实现上述比较,并返回比较中发现的不相等元素的个数

比如:

数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0

数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3

 

• 要求实现函数:

int array_compare(int len1, intarray1[], int len2, int array2[])

【输入】

int len1:输入被比较数组1的元素个数;

int array1[]:输入被比较数组1;

int len2:输入被比较数组2的元素个数;

int array2[]:输入被比较数组2;

【输出】 无

【返回】 不相等元素的个数,类型为int

• 示例

1) 输入:int array1[] = {1,3,5},int len1 = 3,

int array2[] = {77,21,1,3,5},int len2 = 5

函数返回:0

2) 输入:int array1[] = {1,3,5},int len1 = 3,

int array2[] = {77,21,1,3,5,7},int len2 = 6

函数返回:3

 

2、约瑟夫环

• 问题描述:

输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),

和初始计数值m。从数列首位置开始计数,计数到m后,用数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列

所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编

程实现上述计数过程,同时输出数值出列的顺序

比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数

(数值3所在位置)

第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所

在位置从新开始计数

第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在

位置开始计数

第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位

置开始计数

最后一轮计数出列数字为4,计数过程完成。

输出数值出列顺序为:2,3,1,4。

 

• 要求实现函数:

void array_iterate(int len, int input_array[], int m,int output_arra

y[])

【输入】 int len:输入数列的长度;

int intput_array[]:输入的初始数列

int m:初始计数值

【输出】 int output_array[]:输出的数值出列顺序

【返回】 无

• 示例

输入:int input_array[] = {3,1,2,4},int len = 4, m=7

输出:output_array[]= {2,3,1,4}

 

3、字符串计算

• 问题描述:

输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值

注: 1、表达式只含 +, -,*, / 四则运算符,不含括号

2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况

3、要考虑加减乘除按通常四则运算规定的计算优先级

4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生

5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况

• 要求实现函数:

int calculate(int len,char *expStr)

【输入】 int len: 字符串长度;

char *expStr: 表达式字符串;

【输出】 无

【返回】 计算结果

• 示例

1) 输入:char *expStr = “1+4*5-8/3”

函数返回:19

2) 输入:char *expStr = “8/3*3”

函数返回:6

 

第五题:一副牌中发五张扑克牌给你:让你判断数字的组成:

有以下几种情况:

1:四条:即四张一样数值的牌(牌均不论花色)

2:三条带一对

3:三条带两张不相同数值的牌

4:两对

5:顺子 包括 10,J,Q,K,A

6:什么都不是

7:只有一对

 

2. 将一个字符串的元音字母复制到另一个字符串,并排序(30分)

问题描述:

有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。

说明:

1、 元音字母是a,e,i,o,u,A,E,I,O,U。

2、 筛选出来的元音字母,不需要剔重;

最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。

要求实现函数:

void sortVowel (char* input, char* output);

【输入】 char* input,表示输入的字符串

【输出】 char* output,排好序之后的元音字符串。

【返回】 无

示例

输入:char *input = “Abort!May Be Some Errors In Out System. “

输出:char *output =“aeeeooAEIO “

 

3. 身份证号码合法性判断

问题描述:

我国公民的身份证号码特点如下:

1、 长度为18位;

2、 第1~17位只能为数字;

3、 第18位可以是数字或者小写英文字母x。

4、 身份证号码的第7~14位表示持有人生日的年、月、日信息。

例如:511002 19880808 0111或511002 19880808011x。

请实现身份证号码合法性判断的函数。

除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。

年份大于等于1900年,小于等于2100年。

需要考虑闰年、大小月的情况。所谓闰年,能被4整除且不能被100整除 或 能被400整除的年份,闰年的2月份为29天,非闰年的2月份为28天。

函数返回值:

1) 如果身份证号合法,返回0;

2) 如果身份证号长度不合法,返回1;

3) 如果身份证号第1~17位含有非数字的字符,返回2;

4) 如果身份证号第18位既不是数字也不是英文小写字母x,返回3;

5) 如果身份证号的年信息非法,返回4;

6) 如果身份证号的月信息非法,返回5;

7) 如果身份证号的日信息非法,返回6(请注意闰年的情况);

【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如

果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。

要求实现函数:

int verifyIDCard(char* input)

 

示例

1) 输入:”511002 111222”,函数返回值:1;

2) 输入:”511002 abc123456789”,函数返回值:2;

3) 输入:”511002 19880808123a”,函数返回值:3;

4) 输入:”511002 188808081234”,函数返回值:4;

5) 输入:”511002 198813081234”,函数返回值:5;

6) 输入:”511002 198808321234”,函数返回值:6;

7) 输入:”511002 1989 0229 1234”,函数返回值:7;

8) 输入:”511002 198808081234”,函数返回值:0;

 

 

 第二道:对一个数组,将数组中从大到小排序,数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数  若奇数和偶数不等长,则把剩下的直接放到数组中。

-------------------思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。

 

2010年华为软件校园招聘编程测验                                类别:软件C语言

 

编程题(共2题,第一题40分,第二题60分,共100分。)

1. 删除字符串中所有给定的子串(40分)

问题描述:

在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。

要求实现函数:

int delete_sub_str (const char *str, constchar *sub_str, char *result_str)

【输入】 str:输入的被操作字符串

        sub_str:需要查找并删除的特定子字符串

【输出】result_str:在str字符串中删除所有sub_str子字符串后的结果

【返回】 删除的子字符串的个数

I、              子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。

比如:在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。如果

匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。

II、  输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。

示例: 输入:str = "abcde123abcd123", sub_str = "123"

输出:result_str ="abcdeabcd"

返回:2

输入:str ="abcde123abcd123", sub_str = "1234"

输出:result_str= "abcde123abcd123"

返回:0

 

 

2. 高精度整数加法(60分)

问题描述:

在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。如下:

9876543210 + 1234567890 = ?

让字符串num1="9876543210",字符串 num2="1234567890",结果保存在字符串 result = "11111111100"。

-9876543210 + (-1234567890) = ?

让字符串num1="-9876543210",字符串 num2="-1234567890",结果保存在字符串 result = "-11111111100"。

要求编程实现上述高精度的十进制加法。

 

要求实现函数:

void add (const char *num1, const char*num2, char *result)

 

【输入】num1:字符串形式操作数1,如果操作数为负,则num1[0]为符号位'-'

num2:字符串形式操作数2,如果操作数为负,则num2[0]为符号位'-'

【输出】result:保存加法计算结果字符串,如果结果为负,则result[0]为符号位。

注:

I、当输入为正数时,'+'不会出现在输入字符串中;当输入为负数时,'-'会出现在输入字符串中,且一定在输入字符串最左边位置;

II、输入字符串所有位均代表有效数字,即不存在由'0'开始的输入字符串,比如"0012","-0012"不会出现;

III、要求输出字符串所有位均为有效数字,结果为正或0时'+'不出现在输出字符串,结果为负时输出字符串最左边位置为'-'。

示例

输入:num1 ="580", num2 ="-50", 输出:result = "530"

输入:num1 ="580", num2 ="-600", 输出:result = "-20"

 

//二、最大掩码算法

//输入ip地址,掩码,网段,返回最大俺码,

//返回0表示不在该网段

 

 

1.给定的一个字符串,比如:this is my program,要求将每个单词的首字母大写,输出:This Is My Program

2.给定一个字符串,要求将其逆向输出,如:adcdefgik,输出:kigfedcda

3.给定一个字符串,要求删掉重复的字符,只保留其中一个。如:aabcdddffgh,输出:abcdfgh

 

 

 华为面向2013年招聘笔试题

题目一:子串分离

题目描述:

通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。

请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。

如果输入“abc defgh i d”,结果将是abc,def,gh,i,d,

要求实现函数:

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

【输入】 pInputStr: 输入字符串

lInputLen:输入字符串长度

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

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

示例

输入:“abc def ghi d”

输出:“abc,def,gh,i,d,”

 

题目二:逆序链表输出。

题目描述:

将输入的一个单向链表,逆序后输出链表中的值。链表定义如下:

typedef struct tagListNode

{

int value;

struct tagListNode *next;

}ListNode;

 

要求实现函数:

void converse(ListNode **head);

【输入】head: 链表头节点,空间已经开辟好

【输出】head: 逆序后的链表头节点

【返回】无

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值