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

2011 年华为杯校园编程大赛

类别:软件C 语言

 

 

 

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

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

 

1、  排序算法( 20 分)

l  问题描述

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

l  要求实现函数

void DscSort (const int InputArray[], unsigned int n, int OutputArray[])

【输入】 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  要求实现函数

unsigned int GetNotRepeatNum(unsigned int lValue)

【输入】 lValue   给定的数字,返回大于该值的最小不重复数

【输出】

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

l  示例

输入: iValue =54

返回: 56

 

输入: iValue =10

返回: 12   

 

输入: iValue =98

返回: 101

 

输入: iValue =21099

返回: 21201

 

3 、字符串匹配( 50 分)

l  问题描述

判断包含通配符的匹配字符串是否完全匹配输入的字符串,匹配字符串中包含的通配符仅有‘ * ’和‘?’,且通配符不会连续出现 。(要求完全匹配,而不是包含)

其中,通配符‘ * ’:代替 0 个或多个字符,通配符‘ ? ’:代替一个字符

l  要求实现函数

int GetMatchSta (const char *ArrStr, const char *KeyStr)

【输入】 ArrStr     给定的字符串

         KeyStr       包含通配符的匹配字符串

【输出】

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

l  示例

输入: ” abcdefg”, “a*'”

返回: 1

 

输入: “tommababcabc” , t?m*ab*abc

返回: 1

 

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

第三题参考答案:

int GetMatchStr(const char* ArrStr,const char* 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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值