同学都陆续到华为参加了机试,题目整体难度不大,基本上都是考字符串相关的题目。这里就分享一套2012年华为南京机试C++或者C的编程题目。 2012年华为南京机试第一题整数化成字符串
给定一个整数(有可能是负数),将整数变成字符串。函数已经声明好类似void change(int number, char s[])的形式。可以自己写用例测试。 2012年华为南京机试第二题单链表逆序
给定一个已经定义好的单链表,将单链表中的数字逆序。输入为head指针,返回的也是一个head指针。函数声明为void sor(Node **head)的形式。 2012年华为南京机试第三题字符串最大回文子串
给定一个字符串,寻找它的一个最大子串,该子串是回文。例如给定用例字符串”gabcdcbaef”,那么最大回文字串是”abcdcba”。函数声明为void huiwen(char input[], intlen, char output[])。 一天几个考场的题目有相同的也有不同的,基本上难度都不大。要求做前两题就可以了,有能力的可以做第三题并且计入总分。有同学做完当场就看到是100分,也有0分的,至于怎么计分的不太清楚。希望七叶草提供的2012年华为南京机试编程题对你有帮助!
武汉 题目:有一个数组a[N]如a[10]={0,1,2,3,4,5,6,7,8,9}每隔两个数删除一个数,如0,1,2(删除),3,4,5(删除),6,7,8(删除),9,到数组尾部回到数组头部继续删除,要求编写一个函数实现实现上述操作,返回最后一个数的数组下标。 函数接口:intgetLast(intiLen) 参数:数组初始元素个数iLen 01 #include
04 typedef struct node *List; 05 typedef struct node *PNode; 06
07 typedef struct node 08 { 09 int data; 10 struct node *next; 11 }Node; 12
13 int getLast(int iLen)
14 { 15 int i; 16 List L;
17 PNodetempNode,current; 18 L = (List)malloc(sizeof(Node)); 19 L->next = NULL; 20 current = L; 21 for (i=0; i 23 tempNode = (PNode)malloc(sizeof(Node)); 24 tempNode->data = i; 25 current->next = tempNode; 26 current = tempNode; 27 } 28 current->next = L->next; 29 current = L; 30 while (iLen> 1) 31 { 32 current = current->next->next; 33 tempNode = current->next; 34 current->next = tempNode->next; 35 printf(\36 free(tempNode); 37 iLen--; 38 } 39 return current->data; 40 } 41 42 int main() 43 { 44 printf(\45 return 0; 46 } 编程题(共2题,第一题40分,第二题60分,共100分。请上机编写轨范,按题目要求提交文件。[详见考试申明] 本试题采用自动测试用例进行评分,测试用例过错考生公开,凡不满足提交要求导致不能运行或用例不经由过程,不予评分)。 1. 删除字符串中所有给定的子串(40分) 问题描述: 在给定字符串中查找所有特定子串并删除,若是没有找到响应子串,则不作任何操作。 要求实现函数: intdelete_sub_str(const char *str, const char *sub_str, char *result_str) 【输入】str:输入的被操作字符串 sub_str:需要查找并删除的特定子字符串 【输出】result_str:在str字符串中删除所有sub_str子字符串后的终局 【返回】删除的子字符串的个数 I、 子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如: 在字符串\中,采用最左匹配子串\可以匹配2个\字串。若是 匹配出从左到右位置2起头的\,则不是最左匹配,且只能匹配出1个\字串。 II、 输入字符串不会跨越100 Bytes,请不用考虑超长字符串的情况。 示例 输入:str = \ sub_str = \ 输出:result_str = \返回:2 输入:str = \sub_str = \ 输出:result_str = \返回:0 2. 高精度整数加法(60分) 问题描述: 在计较机中,由于措置器位宽限制,只能措置有限精度的十进制整数加减法,比如在32位宽措置器计较机中, 参与运算的操作数和终局必须在-231~231-1之间。若是需要进行更年夜规模的十进制整数加法,需要使用特殊 的体式格局实现,比如使用字符串保存操作数和终局,采纳逐位运算的体式格局。如下: 9876543210 + 1234567890 = ? 让字符串 num1=\,字符串 num2=\,终局保存在字符串 result = \。 -9876543210 + (-1234567890) = ? 让字符串 num1=\,字符串 num2=\,终局保存在字符串 result = \。 要求编程实现上述高精度的十进制加法。 要求实现函数: void add (const char *num1, const char *num2, char *result) 【输入】num1:字符串形式操作数1,若是操作数为负,则num1[0]为符号位- num2:字符串形式操作数2,若是操作数为负,则num2[0]为符号位- 【输出】result:保存加法计较终局字符串,若是终局为负,则result[0]为符号位。 I、 当输入为正数时,+不会出今朝输入字符串中;当输入为负数时,-会出今朝输入字符串中,且必然在输入字符串最左边位置; II、 输入字符串所有位均代表有效数字,即不存在由0起头的输入字符串,比如\\不会呈现; III、 要求输出字符串所有位均为有效数字,终局为正或0时+不出今朝输出字符串,终局为负时输出字符串最左边位置为-。 示例 输入:num1 = \ num2 = \输出:result = \输入:num1 = \num2 = \输出:result = \#include intdeletestr(const char*str, const char*sub_str, char *result) const char*p = str; const char*p1 = str; const char*q = sub_str; int k=0; while(*p!=/0) if((*p==*q)&&*q!=/0) p++; q++; const char*ptr = p; if(*p==/0) *result=/0; else if(*q==/0) q=sub_str;