1、1华为校园招聘机考试题总结(软件)1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#include #include #include #include int delete_sub_str(const char *str,const char *sub_str,char *result)assert(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);mems
2、et(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);2free(temp);return count;int main()char s100 = 0;int num = delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);printf(“The number of sub_str is %drn”,num)
3、;printf(“The result string is %srn”,s);2、约瑟夫环是一个数学的应用问题:已知 n 个人(以编号 1,2,3.n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。#include#includetypedef struct Nodeint num;struct Node *next;LinkList;LinkList *creat(int n)LinkList *p,*q,*head;int i=1; p=(LinkLis
4、t *)malloc(sizeof(LinkList);p-num=i;head=p;for(i=2;inum=i;p-next=q;p=q;3p-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(“%5d“,p-num);s=p;q-next=p-next;p=p-next;free(s);printf(“%5dn“,p-num);int m
5、ain()LinkList *L;int n, m;n=9;m=5;L=creat(n);fun(L,m);return 0;3、比较一个数组的元素 是否为回文数组#include 4#include int huiwen(char str)int i,len,k=1;len=strlen(str);for(i=0;i#include#includeint array_compare(int len1, int array1, int len2, int array2)int count=0;for( ;len1=0len1-,len2-)if(array1len1-1=array2len2-
6、1)count+;return count;int main()int result=0;int array1=1,3,5;6int 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(“the result is %d“, result);5、约瑟夫问题 问题描述: 输入一个由随机数组
7、成的数列(数列中每个数均是大于 0 的整数,长度已知),和初始计数值 m。从数列首位置开始计数,计数到 m 后,将数列该位置数值替换计数值 m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序比如: 输入的随机数列为:3,1,2,4,初始计数值 m=7,从数列首位置开始计数(数值 3 所在位置)第一轮计数出列数字为 2,计数值更新 m=2,出列后数列为 3,1,4,从数值 4所在位置从新开始计数第二轮计数出列数字为 3,计数值更新 m=3,出列后数列为 1,4,从数值 1
8、 所在位置开始计数第三轮计数出列数字为 1,计数值更新 m=1,出列后数列为 4,从数值 4 所在位置开始计数最后一轮计数出列数字为 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:初始计数值7【输出】 int output_array:输出的数值出列顺序【返回】 无 示例 输入:int input_array = 3,1,2,4,i
9、nt len = 4, m=7输出:output_array = 2,3,1,4/循环链表实现/#include#include#includetypedef struct Nodeint 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_array0;p=h;for(i=1;inum=input_arrayi;p-next=s;p=s;p-next=h;return (h);void arr
10、ay_iterate(int len, int input_array, int m)node *q,*p,*s;8int i=0,j=0,k;int output_array4;p=creat(len,input_array);while(p-next!=p)for(i=1;inext;m=p-num;printf(“%5d“,m);output_arrayj+=m;s=p;q-next=p-next;p=p-next;free(s);s=NULL;m=p-num;printf(“%5dn“,m);output_arrayj=p-num;k=j;for(j=0 ; j#include10#include#include#define LENGTH 13int verifyMsisdn(char *inMsisdn)char *pchar=NULL;assert(inMsisdn!=NULL);if(LENGTH=strlen(inMsisdn)if(8=*inMsisdn)else return 2 ;elsereturn 3;elsereturn 1;return 0;int main()char *pchar=NULL;unsigned char ichar=0;int result;switch(ichar)