注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

时间记录器

记录我的Linux、Android学习之路

 
 
 

日志

 
 

历年各种华为上机题 (部分)  

2012-09-08 13:37:34|  分类: 未来计划 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

2009年华为软件设计大赛两道编程题

 

编程题(共2题,第1 40 分,第2 30分。请上机编写程序,按题目要求提交文件。本

试题采用自动测试用例进行评分,测试用例不对考生公开?,凡不满足提交要求导致不能编

译或用例不通过,不予评分)。

 

1.  报数游戏

问题描述: 

设有N 个人围坐一圈并按顺时针方向从1 N 编号,从第S个人开始进行1 M报数,报

数到第 M个人时,此人出圈,再从他的下一个人重新开始1 M的报数,如此进行下去直

到所有的人都出圈为止。现要打印出出圈次序。  

要求实现函数: 

void circle_sort (int n, int s, int m, int *p)

输入:n 游戏总人数  s 报数的起始编号  m 报数的数值    

输出:p 指向长度为n的数组,出圈次序保存在 p指向的数组中

示例 

   n=7 s=2 m=3  出圈次序为:4 7 3 1 6 2 5

   n=3 s=1 m=2  出圈次序为:2 1 3  

 

 

2.  实现子串查找程序

问题描述: 

判断一个字符串(dst)是否是另一个字符串(src)的子串; 

输出子串在母串中的第一次出现的起始位置; 

匹配的时候不区分大小写; 

不能使用库函数(使用库函数按 0 分计算) 

要求实现函数: 

unsigned int str_str(char * src, char *dst);

返回:如果dstsrc的子串  则返回起始位置       如果不是 则返回0

输入:src 指向母串的指针; dst 指向子串的指针

示例 

src->akrsd5859  dst->rsd

则返回3

src->Rstsawerst36ds  dst->rst

则返回8

src->dfsge         dst-> dfsgesa

则返回0

 

 

 

 

2010年华为软件校园招聘编程测验

 

类别:软件C语言

 

 

 

 

 

 

 

编程题(共2题,第一题40分,第二题60分,共100分。请上机编写程序,按题目要求提交文件。[详见考试说明]

 

本试题采用自动测试用例进行评分,测试用例不对考生公开,凡不满足提交要求导致不能运行或用例不通过,不予评分)。

 

 

 

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

 

问题描述:

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

 

要求实现函数:

int delete_sub_str(const char *str, const char *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"

 

 

// 高精度加法

//要求输出空间足够大

char *Add(char *Add1,char *Add2,char *AddOut)

{ int i,Len1,Len2,OutLen,Sum,AddBit;

  Len1 = strlen(Add1);

  Len2 = strlen(Add2);

  OutLen = Len1>Len2? Len1:Len2;

  for(AddBit=0,i=1;i<=OutLen;i++)

  { if(Len1-i<0)

  Sum = Add2[Len2-i] - '0';

  else if(Len2-i<0)

  Sum = Add1[Len1-i] - '0';

  else

  Sum = Add1[Len1-i] + Add2[Len2-i] - '0'*2;

  Sum += AddBit;

  AddBit = Sum/10;

  AddOut[OutLen-i] = Sum%10 + '0';

  }

  if(AddBit)

  { memmove(AddOut+1,AddOut,OutLen);

  OutLen++;

  }

  AddOut[OutLen]=0;

  return AddOut;

}

 

//二、最大掩码算法

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

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

unsigned int MaxMask(unsigned int ipv4,unsigned int mask,unsigned int Lan)

{ unsigned int i,m;

  for(m=0xFFFFFFFF,i=0; i<31&&m>=mask; i++,m<<=1)

  { if((m&ipv4) == Lan)

  return m; //返回最大前缀

  }

  return 0; //不在目标网段

}

 

 

 

 

 

2010 年华为软件设计大赛试卷

 

类别:软件 C++语言 初级

 

  

 


 

 

  评论这张
 
阅读(9985)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017