1 华为校园招聘机考试题总结(厦门大学)
1、删除子串只假如原串中有同样的子串就删掉不论有多少个返回子串个数。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
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个人以编号123...n分别表示围坐在一张圆桌四周。从编号为k的人开始报数数
到m的那个人出列他的下一个人又从1开始报数数到m的那个人又出列依此规律重复下去直到圆桌四周的人所有出列。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int num;
struct Node *next; strcmp比较数组
}LinkList;
LinkList *creat(int n)
{
LinkList *p,*q,*head;
int i=1;
p=(LinkList *)malloc(sizeof(LinkList));
p->num=i; 2
head=p;
for(i=2;i<=n;i++)
{
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;i<m;i++)
{ q=p;
p=p->next;
}
printf("%5d",p->num);
s=p;
q->next=p->next;
p=p->next;
free(s);
}
printf("%5d\n",p->num);
}
int main()
{
LinkList *L;
int n, m;
n=9;
m=5;
L=creat(n);
fun(L,m);
return 0;
}
3、比较一个数组的元素 能否为回文数组
#include <stdio.h>
#include <string.h>
int huiwen(char str[])
{
int i,len,k=1;
len=strlen(str);
for(i=0;i<len/2;i++)
{
if(str[i]!=str[len-i-1])
{
k=1;
break;
}
}
if(k==0)
printf("%s 不是一个回文数\n",str);
else
printf("%s 是一个回文数\n",str); 3
}
void main()
{
char str[100] = {0};
int i;
int len;
printf("Input a string"); /*提示输入Input a string*/
scanf("%s", str); /*scan()函数输入一个字符串*/
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 = 3int array2[] = {77,21,1,3,5}int len2 = 5
函数返回0
2 输入int array1[] = {1,3,5}int len1 = 3int array2[] = {77,21,1,3,5,7}int len2 = 6
函数返回
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
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("the result is %d", result);
}
5、约瑟夫问题
• 问题描绘
输入一个由随机数构成的数列数列中每个数均是大于0的整数长度已知和初始计数值m。
从数列首地点开始计数计数到m后 4
将数列该地点数值替代计数值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所在地点开始计数
最后一轮计数出列数字为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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论