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);
返回:如果dst是src的子串 则返回起始位置 如果不是 则返回0
输入:src 指向母串的指针; dst 指向子串的指针
示例
src->akrsd5859 dst->rsd
则返回3
src->Rstsawerst36ds dst->rst
则返回8
src->dfsge dst-> dfsgesa
则返回0
以上两题,我的解法如下:(希望感兴趣的朋友,一起分享自己的想法)
第一题:
第二题:
注意:不仅要考虑dst的回溯,还要考虑src的回溯。