华为上机试题解析:约瑟夫环问题与MSISDN验证

需积分: 6 1 下载量 61 浏览量 更新于2024-07-23 收藏 166KB DOC 举报
"2011最全华为上机试题及部分答案" 这篇文档涉及的是一个华为上机考试的题目,主要考察的是编程能力和对数据结构的理解。其中一道题目是关于"约瑟夫环"的问题,这是一道经典的数据结构与算法题目。约瑟夫环问题可以通过循环链表来解决,其基本思路是模拟人们围坐一圈报数并淘汰的过程。 首先,题目要求创建一个循环链表来代表围坐的人。`creat`函数实现了这一功能,它接受一个整数n,表示人数,然后创建一个带有编号的循环链表。链表节点定义为`LinkList`结构体,包含一个整数`num`表示编号,以及一个指向下一个节点的指针`next`。`creat`函数通过动态分配内存来创建链表,并在最后将链表尾部链接回头部,形成循环链表。 接着,`fun`函数负责实现约瑟夫环的逻辑。它接受链表头指针`L`和一个整数`m`,表示报数到m的人出列。在函数内部,使用一个循环来模拟报数过程,每次报数到m时,将当前节点从链表中移除。`fun`函数通过打印出列顺序来展示结果。 此外,代码中还给出了另一个函数`verifyMsisdn`,这个函数用于验证一个字符串形式的手机号码(MSISDN)。该函数首先检查输入的手机号码字符串是否为LENGTH13长度,然后进行进一步的合法性检查。虽然这个函数与约瑟夫环问题无关,但可能是上机试题的另一部分,可能考察了C语言中的字符串处理和错误检查。 在华为的上机试题中,这类编程题目旨在检验应聘者的编程能力、数据结构理解及算法实现能力。解决这类问题需要熟悉C语言的基本语法,了解链表操作,以及对算法设计有深入理解。同时,试题也可能涵盖了其他编程和系统相关的知识,如字符串处理、内存管理、错误处理等,这些都是IT行业中重要的基础知识。