编程大赛华为杯.docx

上传人:b****2 文档编号:2870195 上传时间:2023-05-04 格式:DOCX 页数:38 大小:130.39KB
下载 相关 举报
编程大赛华为杯.docx_第1页
第1页 / 共38页
编程大赛华为杯.docx_第2页
第2页 / 共38页
编程大赛华为杯.docx_第3页
第3页 / 共38页
编程大赛华为杯.docx_第4页
第4页 / 共38页
编程大赛华为杯.docx_第5页
第5页 / 共38页
编程大赛华为杯.docx_第6页
第6页 / 共38页
编程大赛华为杯.docx_第7页
第7页 / 共38页
编程大赛华为杯.docx_第8页
第8页 / 共38页
编程大赛华为杯.docx_第9页
第9页 / 共38页
编程大赛华为杯.docx_第10页
第10页 / 共38页
编程大赛华为杯.docx_第11页
第11页 / 共38页
编程大赛华为杯.docx_第12页
第12页 / 共38页
编程大赛华为杯.docx_第13页
第13页 / 共38页
编程大赛华为杯.docx_第14页
第14页 / 共38页
编程大赛华为杯.docx_第15页
第15页 / 共38页
编程大赛华为杯.docx_第16页
第16页 / 共38页
编程大赛华为杯.docx_第17页
第17页 / 共38页
编程大赛华为杯.docx_第18页
第18页 / 共38页
编程大赛华为杯.docx_第19页
第19页 / 共38页
编程大赛华为杯.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

编程大赛华为杯.docx

《编程大赛华为杯.docx》由会员分享,可在线阅读,更多相关《编程大赛华为杯.docx(38页珍藏版)》请在冰点文库上搜索。

编程大赛华为杯.docx

编程大赛华为杯

注:

此次试题包含10-12年三年试题,比较全,适合大家学习

第二届华为杯软件编程大赛初赛试题2

2011年华为杯校园编程大赛4

2011华为编程大赛初赛成都赛区试题(c语言b卷)5

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

2012华为编程大赛试题17

2012年华为杯校园编程大赛决赛18

程序设计大赛报名表20

华为编程规范.20

第二届华为杯软件编程大赛初赛试题

考试要求:

1、根据给定需求,在规定时间内(3个小时)完成试卷。

2、提供统一的工程供编程及测试:

开发调试环境:

VisualC++6.0

运行平台:

Windows

3、编程语言:

C/C++

4、工程文件已经为考生准备好,所有文件,函数命名等,必须按照本要求提供,否则软件无法自动阅卷,将记录为0分。

5、闭卷考试,考试期间,不得翻阅书籍。

参加考试的人员须单独完成,不允许互相讨论交流,更不允许互相拷贝,不得进行其他任何违反公平公正原则的活动。

6.开考试根据公示的服务器地址,下载试题(web页面)

7.考试结束时按照要求打包,点击提交按钮提交客观题答案和编程题答案。

考试标准

1、程序生成test.exe文件,且可正常运行。

2、采用自动测试用来进行评分,测试用例由主考官掌握,不对考生公开:

出现严重问题(死循环、异常中止)则中止后续用例执行;

考试程序的工程说明

1、试题工程。

请把提供的test.rar文件,解压到C盘根目录,双击test.dsw即可使用VC6打开开始工程,开始考试。

过程示例:

解压后文件列表如下:

2、考试代码。

考生只允许在fun.cpp和func.h两个程序文件中按照要求实现题目中要求的函数;另外提供了一个测试入口函数TestEntry,可根据提示在里面进行测试;可在该两个文件中自行定义其它需要的内部函数。

3、编译、调试。

代码编完后,在VC环境下进行编译、调试,并直接在工程中目录下生成可执行文件test.exe。

(工程默认该路径,请不要更改工程设置)

4、工程提交。

程序调试完成或考试结束时,按“交付件要求”打包提交文件。

交附件要求

点击提交编程题答案,提交test.exe;

●请严格按上述要求打包交付件,如未按要求提交,将影响后续的自动阅卷工作,后果自负!

特别提醒:

请最好编完一个功能即进行自测,通过后再实现下一个功能,避免将所有代码写完后统一调试,由于时间或技术问题出现所有功能都没有完成情况。

尽量避免出现异常等导致程序崩溃的情况,出现崩溃的情况则中止阅卷;

2011年华为杯校园编程大赛

类别:

软件C语言

 

编程题(共3题,第一题20分,第二题30分,第三题50分,共100分。

请上机编写程序,按题目要求提交文件。

[详见考试说明]

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

 

矩阵转置(20分)

问题描述

将一个N*N矩阵的行列互换

要求实现函数

voidMatrixTranspose(constchar*InArr,unsignedintn,constchar*OutArray)

【输入】InArr:

输入的字符矩阵

n:

N*N矩阵的行数

【输出】OutArray:

转置后的字符矩阵

【返回】无

注:

输入输出的矩阵都是以一维形式保存的二维数组,

比如输入为{‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’},

实际上表示如下3*3的矩阵

‘1’,’2’,’3’,

‘4’,’5’,’6’,

‘7’,’8’,’9’

示例

输入InArr={‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’},n=3

输出OutArray={‘1’,’4’,’7’,’2’,’5’,’8’,’3’,’6’,’9’}

2、出圈问题(30分)

问题描述

M个人围成一圈报数,数到N(1

报数规则:

1、从第一个人开始报数为1,下一个人报数为上一个人报数加1

2、报数的最大值为2000,如果报数超过2000,则下一个人重新从1开始报数

要求实现函数

intOutFunc(unsignedintiTotalNum,unsignedintiKey)

【输入】iTotalNum:

开始报数前的总人数,0

iKey:

题目中要求的数目N

【输出】无

【返回】剩下的人的原来的位置

示例

输入:

iTotalNum=5,iKey=3

返回:

4

输入:

iTotalNum=15,iKey=3

返回:

10

3、公交站寻址(50分)

问题描述

一个N*N二维矩阵代表城市布局,元素值只有’.’,’X’,‘B’,‘S’,X代表当前位置,B代表路障,S代表公交站,’.’代表可行的路径。

现给定路径长度Y,找到能够到达的公交站的个数,路径中不能包含路障。

路径长度定义:

节点与其自身的距离为0

节点与其上、下、左、右四个相邻节点距离都为1

要求实现函数

intFindStat(constchar*Map,unsignedintiArrN,unsignedintiPathLen)

【输入】Map:

城市布局

iArrN:

城市布局矩阵的行数

iPathLen:

给定的路径长度

【输出】无

【返回】能够到达的公交站个数

注:

输入矩阵是以一维形式保存的二维数组,

比如输入为{‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,’G’,‘H’,‘I’},

实际上表示如下3*3的矩阵

‘A’,’B’,’C’,

‘D’,’E’,’F’,

‘G’,’H’,’I’

示例

输入:

"...S........X.S.....S....",5,3

返回:

2

输入:

"S...S.........BS........X",5,5

返回:

1

2011华为编程大赛初赛成都赛区试题(c语言b卷)

2011-05-3014:

192126人阅读评论(0)收藏举报

编程华为语言c测试算法

2011年华为杯校园编程大赛

类别:

软件C语言

编程题(共3题,第一题20分,第二题30分,第三题50分,共100分。

请上机编写程序,按题目要求提交文件。

[详见考试说明]

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

1、排序算法(20分)

l问题描述

将给定的无序整数数组降序排列后输出,输入的无序数组长度为N,类型为unsignedint

l要求实现函数

voidDscSort(constintInputArray[],unsignedintn,intOutputArray[])

【输入】InputArray:

给定的无序数组

n:

数组长度

【输出】OutputArray:

排序后的数组

【返回】无

l示例

输入:

InputArray={1,5,4,8,3,2,9,6,7,0}

输出:

OutputArray={9,8,7,6,5,4,3,2,1,0}

2、查找最大的不重复数(30分)

l问题描述

如果一个数字十进制表达时,不存在连续两位相同,则称之为“不重复数”。

例如,105、1234和12121都是“不重复数”,而11、100和1225不是。

给定一个正整数A,返回大于A的最小“不重复数”。

A小于100000

l要求实现函数

unsignedintGetNotRepeatNum(unsignedintlValue)

【输入】lValue:

给定的数字,返回大于该值的最小不重复数

【输出】无

【返回】大于iValue的最小不重复数

l示例

输入:

iValue=54

返回:

56

输入:

iValue=10

返回:

12

输入:

iValue=98

返回:

101

输入:

iValue=21099

返回:

21201

3、字符串匹配(50分)

l问题描述

判断包含通配符的匹配字符串是否完全匹配输入的字符串,匹配字符串中包含的通配符仅有‘*’和‘?

’,且通配符不会连续出现。

(要求完全匹配,而不是包含)

其中,通配符‘*’:

代替0个或多个字符,通配符‘?

’:

代替一个字符

l要求实现函数

intGetMatchSta(constchar*ArrStr,constchar*KeyStr)

【输入】ArrStr:

给定的字符串

KeyStr:

包含通配符的匹配字符串

【输出】无

【返回】是否匹配,匹配返回1,不匹配返回0

l示例

输入:

”abcdefg”,“a*'”

返回:

1

输入:

“tommababcabc”,t?

m*ab*abc

返回:

1

(前两题很简单,给出第三题参考答案,答案来源于网络)

第三题参考答案:

intGetMatchStr(constchar*ArrStr,constchar*KeyStr)

{

switch(*KeyStr)

{

case'/0':

return(*ArrStr=='/0')?

1:

0;

case'?

':

return(*ArrStr=='/0')?

0:

GetMatchStr(ArrStr+1,KeyStr+1);

case'*':

return(*ArrStr=='/0')?

GetMatchStr(ArrStr,KeyStr+1):

GetMatchStr(ArrStr+1,KeyStr)|GetMatchStr(ArrStr,KeyStr+1);

default:

return(*ArrStr!

=*KeyStr)?

0:

GetMatchStr(ArrStr+1,KeyStr+1);

}

}

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

类别:

软件C语言

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

请上机编写程序,按题目要求提交文件。

[详见考试说明]

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

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

问题描述:

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

要求实现函数:

intdelete_sub_str(constchar*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、输入字符串不会超过100Bytes,请不用考虑超长字符串的情况。

示例

输入:

str="abcde123abcd123"

sub_str="123"

输出:

result_str="abcdeabcd"

返回:

2

输入:

str="abcde123abcd123"

sub_str="1234"

输出result_str="abcde123abcd123"

返回:

0

viewplaincopytoclipboardprint?

01.#include

02.#include

03.#include

04.

05./*删除字串函数,在src中删除sub子串,并将结果保存在result字符串中*/

06.intdelSubStr(char*src,char*sub,char*result)

07.{

08.char*src_p=src;

09.char*sub_p=sub;

10.char*res_p=result;

11.intcount=0;//记录包含子串的个数

12.intsub_len=strlen(sub);//记录子串的长度

13.char*temp;//临时保存子串的副本

14.temp=(char*)malloc(sub_len+1);

15.memset(temp,'\0',sub_len+1);

16.while(*src_p)

17.{

18.memcpy(temp,src_p,sub_len);

19.

20./*原串中包含与sub完全匹配的子串*/

21.if(!

strcmp(temp,sub))

22.{

23.count++;

24.src_p+=sub_len;

25.}

26.else

27.*res_p++=*src_p++;

28.*res_p='\0';

29.free(temp);

30.returncount;//返回包含子串的个数

31.}

32.

33.voidmain()

34.{

35.charresult[100];

36.intcount=delSubStr("abcdefgde","de",result);

37.printf("Thenewstringis:

");

38.printf("%s\n",result);

39.printf("countis:

");

40.printf("%d\n",count);

41.}

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

问题描述:

在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,

参与运算的操作数和结果必须在-231~231-1之间。

如果需要进行更大范围的十进制整数加法,需要使用特殊

的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。

如下:

9876543210+1234567890=?

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

-9876543210+(-1234567890)=?

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

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

要求实现函数:

voidadd(constchar*num1,constchar*num2,char*result)

【输入】num1:

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

nu2:

字符串形式操作数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"

程序代码(C语言):

01.#include

02.#include

03.

04./*判断字符串整数是否合法,合法返回'1',否则返回'0'*/

05.intisLegalNum(constchar*num)

06.{

07.constchar*num_p=num;

08.intnum_len;//记录整数长度(不包含符号位和结束符'\0')

09.

10./*字符串指针为空,不是合法的整数,返回'0'*/

11.if(num_p==NULL)

12.return0;

13.if(*num_p=='-')

14.num_p++;

15.num_len=strlen(num);

16.

17./*不合法整数,返回'0'*/

18.if(*num_p<=48||*num_p>57)

19.return0;

20.inti;

21.for(i=0;i

22.{

23./*不合法整数,返回'0'*/

24.if(*num_p>57||*num_p<48)

25.return0;

26.}

27.return1;

28.}

29.

30./*将字符串逆序*/

31.voidreverseStr(char*result)

32.{

33.inti;

34.chartemp;

35.intres_len=strlen(result);

36.for(i=0;i

37.{

38.temp=result[i];

39.result[i]=result[res_len-i-1];

40.result[res_len-i-1]=temp;

41.}

42.}

43.

44./*加法函数,用于将两个字符串形式的整数相加,结果保存在char*result中*/

45.voidadd(constchar*num1,constchar*num2,char*result)

46.{

47./*判断两个字符串整数num1和num2是否合法,如果不合法则要求用户重新输入*/

48.if(!

(isLegalNum(num1)&&isLegalNum(num2)))

49.{

50.strcpy(result,"对不起,您输入的字符串整数不是合法的十进制整数,请您检查后重新输入,谢谢合作!

");

51.return;

52.}

53.intcount=0;//记录进位或借位

54.constchar*num1_p;//记录第一个数的字符串起始地址

55.constchar*num2_p;//记录第二个数的字符串起始地址

56.char*res_p=result;//记录结果字符串起始地址

57.intnum1_len=strlen(num1);//第一个数的长度

58.intnum2_len=strlen(num2);//第二个数的长度

59.num1_p=num1+num1_len-1;//num1_p指向第一个数的最后一位

60.num2_p=num2+num2_len-1;//num2_p指向第二个数的最后一位

61.

62./*加法运算,此时两个数的符号相同*/

63.if((*num1!

='-'&&*num2!

='-')||(*num1=='-'&&*num2=='-'))

64.{

65./*两个负数相加*/

66.if(*num1=='-'&&*num2=='-')

67.{

68.num1_len--;

69.num2_len--;

70.inti;

71.for(i=0;i<(num2_len>num1_len?

num1_len:

num2_len);i++)

72.{

73.*res_p++=(*num1_p-'0'+*num2_p-'0'+count)%10+'0';

74.count=(*num1_p-'0'+*num2_p-'0'+count)/10;

75.num1_p--;

76.num2_p--;

77.}

78.

79./*如果第一个数的长度大于第二个数*/

80.if(num1_len>num2_len)

81.{

82.for(i=0;i

83.{

84.*res_p++=(*num1_p-'0'+count)%10+'0';

85.count=(*num1_p-'0'+count)/10;

86.num1_p--;

87.}

88.}

89.

90./*如果第一个数的长度小于第二个数*/

91.elseif(num1_len

92.{

93.for(i=0;i

94.{

95.*res_p++=(*num2_p-'0'+count)%10+'0';

96.count=(*num2_p-'0'+count)/10;

97.num2_p--;

98.}

99.}

100.

101./*向最高位进一位*/

102.if(count==1)

103.*res_p++='1';

104.*res_p++='-';

105.*res_p='\0';

106.reverseStr(result);

107.}

108.

109./*两个正数相加*/

110.if(*num1!

='-'&&*num2!

='-')

111.{

112.inti;

113.for(i=0;i<(num2_len>num1_len?

num1_len:

num2_len);i++)

114.{

115.*res_p++=(*num1_p-'0'+*num2_p-'0'+count)%10+'0';

116.count=(*num1_p-'0'+*num2_p-'0'+count)/10;

117.num1_p--;

118.num2_p--;

119.}

120.

121./*如果第一个数的长度大于第二个数*/

122.if(num1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2