好文档 - 专业文书写作范文服务资料分享网站

2012华为校园招聘机考试题总结(厦门大学)

天下 分享 时间: 加入收藏 我要投稿 点赞

2012华为校园招聘机考试题总结(厦门大学)

1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。 #include #include #include #include

int delete_sub_str(const char *str,const char *sub_str,char *result) { assert(str != NULL && sub_str != NULL); const char *p,*q; char *t,*temp; p = str; q = sub_str; t = result; int n,count = 0; n = strlen(q); tmep = (char *)malloc(n+1); memset(temp,0x00,n+1); while(*p) { memcpy(temp,p,n); if(strcmp(temp,q) == 0 ) { count++; memset(temp;0x00,n+1); p = p + n; } else { *t = *p; p++; t++; memset(temp,0x00,n+1); } } free(temp); return count; }

int main() { char s[100] = {‘\\0’}; int num = delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s); printf(“The number of sub_str is %d\\r\\n”,num); printf(“The result string is %s\\r\\n”,s); }

2、约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 #include #include typedef struct Node { int num; struct Node *next; }LinkList;

LinkList *creat(int n) { LinkList *p,*q,*head; int i=1; p=(LinkList *)malloc(sizeof(LinkList)); p->num=i; head=p;

for(i=2;i<=n;i++) { 1

q=(LinkList *)malloc(sizeof(LinkList)); q->num=i; p->next=q; p=q; }

p->next=head; /*使链表尾指向链表头 形成循环链表*/ return head; }

void fun(LinkList *L,int m) { int i; LinkList *p,*s,*q; p=L; printf(\出列顺序为:\ while(p->next!=p) { for(i=1;inext; } printf(\ s=p; q->next=p->next; p=p->next; free(s); } printf(\}

int main() { LinkList *L; int n, m; n=9; m=5; L=creat(n); fun(L,m); return 0; }

3、比较一个数组的元素 是否为回文数组 #include #include

int huiwen(char str[]) { int i,len,k=1; len=strlen(str); for(i=0;i

void main() { char str[100] = {0}; int i;

2

int len; printf(\:\提示输入Input a string:*/ scanf(\函数输入一个字符串:*/ huiwen(str); }

4、 数组比较(20分) ? 问题描述:

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数 比如:

数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0 数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3 ? 要求实现函数:

int array_compare(int len1, int array1[], int len2, int array2[]) 【输入】 int len1:输入被比较数组1的元素个数; int array1[]:输入被比较数组1;

int len2:输入被比较数组2的元素个数; int array2[]:输入被比较数组2; 【输出】 无

【返回】 不相等元素的个数,类型为int ? 示例

1) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5 函数返回:0

2) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6 函数返回:3

#include #include #include

int array_compare(int len1, int array1[], int len2, int array2[]) { int count=0; for( ;len1>=0&&len2>=0 ;len1--,len2--) { if(array1[len1-1]==array2[len2-1]) { count++; } } return count; }

int main() { int result=0; int array1[]={1,3,5}; int len1=3; int array2[]={77,12,1,3,5}; int len2=5; result=array_compare( len1, array1, len2, array2); ///result=array_compare( len1, array1[], len2, array2[]);不能这样

// 函数形参中永远只是传得首地址,不能传数组 切记切记!!!!!! printf(\}

5、约瑟夫问题

? 问题描述:

输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序

比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置) 第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数 第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数 第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数

3

最后一轮计数出列数字为4,计数过程完成。 输出数值出列顺序为:2,3,1,4。

? 要求实现函数:

void array_iterate(int len, int input_array[], int m, int output_array[]) 【输入】 int len:输入数列的长度; int intput_array[]:输入的初始数列 int m:初始计数值

【输出】 int output_array[]:输出的数值出列顺序 【返回】 无

? 示例

输入:int input_array[] = {3,1,2,4},int len = 4, m=7 输出:output_array[] = {2,3,1,4}

////////////循环链表实现////////////////////// #include #include #include typedef struct Node { int num; struct node *next; } node;

node *creat(int len , int input_array[]) { node *h,*s,*p; int i; h=(node*)malloc(sizeof(node)); h->num=input_array[0]; p=h; for(i=1;inum=input_array[i]; p->next=s; p=s; } p->next=h; return (h); }

void array_iterate(int len, int input_array[], int m) { node *q,*p,*s; int i=0,j=0,k; int output_array[4]; p=creat(len,input_array); while(p->next!=p) { for(i=1;inext; } m=p->num; printf(\ output_array[j++]=m; s=p; q->next=p->next; p=p->next; free(s); s=NULL; }

4

m=p->num; printf(\ output_array[j]=p->num; k=j; for(j=0 ; j<=k; j++) { printf(\ } }

int main() { int input_array[]={3,1,2,4}; int len=4; int m=7; int output_array[4]; array_iterate(len, input_array, m, output_array); }

6、 手机号码合法性判断(20分) ? 问题描述:

我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下: 1、 长度13位;

2、 以86的国家码打头;

3、 手机号码的每一位都是数字。

请实现手机号码合法性判断的函数要求: 1) 如果手机号码合法,返回0; 2) 如果手机号码长度不合法,返回1

3) 如果手机号码中包含非数字的字符,返回2; 4) 如果手机号码不是以86打头的,返回3;

【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。

? 要求实现函数:

int verifyMsisdn(char* inMsisdn)

【输入】 char* inMsisdn,表示输入的手机号码字符串。 【输出】 无

【返回】 判断的结果,类型为int。 ? 示例

输入: inMsisdn = “869123456789“ 输出: 无 返回: 1

输入: inMsisdn = “88139123456789“ 输出: 无 返回: 3

输入: inMsisdn = “86139123456789“ 输出: 无 返回: 0

#include #include #include #include #define LENGTH 13

int verifyMsisdn(char *inMsisdn) { char *pchar=NULL; assert(inMsisdn!=NULL); if(LENGTH==strlen(inMsisdn)) { if(('8'==*inMsisdn)&&(*(inMsisdn+1)=='6')) {

5

2012华为校园招聘机考试题总结(厦门大学)

2012华为校园招聘机考试题总结(厦门大学)1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#include#include#include#includeintdelete_sub_str(constchar*str,
推荐度:
点击下载文档文档为doc格式
7gsbe4ohfm208bi78dpv
领取福利

微信扫码领取福利

微信扫码分享