logo资料库

2014年华为校园招聘机试题汇总.doc

第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
资料共36页,剩余部分请下载后查看
2014 年华为校园招聘机试题汇总 1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入 1,2,3,4 则输出为 5,当输入只有一 个数的时候,则最小数和最大数都是该数,例如只输入 1,则输出为 2;另外数组的长度不超过 50 #include main() { int num[50]={0}; int i,n; printf("请输入整型数组的长度(1~50):"); scanf("%d",&n); printf("请输入整型数组的元素:"); for (i=0;inum[j]) min_num=num[j]; } int sum=min_num+max_num; printf("数组中最大与最小值之和:%d\n",sum); return 0; } 2.求两个长长整型的数据的和并输出,例如输入 1233333333333333 。。。 3111111111111111111111111.。。。,则输 出。。。。 #include #include #include main() { { sum[len_max--]=((num1[len_num1-1]-'0')+(num 2[len_num2-1]-'0')); } if(len_num1>0) { char *num1,*num2; char *sum; int temp; //两个长长整型数据 // int len_num1,len_num2; // 两个长长整型数据的长度 int len_max,len_min; num1=(char*)malloc(sizeof(char)); num2=(char*)malloc(sizeof(char)); printf("输入两个长长整型数据:"); scanf("%s",num1); printf("输入两个长长整型数据:"); scanf("%s",num2); len_num1=strlen(num1); len_num2=strlen(num2); len_max=(len_num1>=len_num2)? len_num1:len_num2; sum[len_max--]=num1[len_num1 - 1 ]-'0'; len_num1--; } if(len_num2>0) { sum[len_max--]=num1[len_num2 - 1]-'0'; len_num2--; } for(int j=len_max1;j>=0;j--) //实现进位操作 { // temp=sum[j]-'0'; if(sum[j]>=10) { sum[j-1]+=sum[j]/10; len_min=(len_num1<=len_num2)? sum[j]%=10; len_num1:len_num2; int len_max1=len_max; sum=(char*)malloc(sizeof(char)*len_max); memset(sum,0x00,len_max+1);//切忌初始化 for(;len_num1>0&&len_num2>0;len_num1--,len_ num2--) } } char *outsum=(char*)malloc(sizeof(char)*len_max1); j=0; while(sum[j]==0) //跳出头部 0 元素
j++; for(int m=0;m #include #include void stringFilter(const char *p_str, long len, char *p_outstr) { int array[256]={0}; const char *tmp = p_str; for(int j=0;j
【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; #include #include #include { *p_outstr++ =p_str[i]; } count = 1;//注意其位置 void stringZip(const char *p_str, long len, char *p_outstr) { } } *p_outstr = '\0'; int count=1; for(int i=0;i1) { *p_outstr++ = count +'0'; *p_outstr++ =p_str[i]; } else } void main() { char *str = "cccddecc"; printf("压缩之前的字符串为:%s\n",str); int len = strlen(str); char outstr * = (char*)malloc(len*sizeof(char)); stringZip(str,len,outstr); printf("压缩之后的字符串为:%s\n",outstr); free(outstr); outstr = NULL; } 5.通过键盘输入 100 以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数 1 运算符 操作数 2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1. 操作数为正整数,不需要考虑计算结果溢出的情况。 2. 若输入算式格式错误,输出结果为“0”。 要求实现函数: void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; #include #include #include void arithmetic(const char *input, long len, char *output) { char s1[10]; char s2[10]; char s3[10]; int cnt = 0;
int len_input=strlen(input); for(int i=0;i'9') { *output++ = '0'; *output = '\0'; return; } } int len_s3=strlen(s3); for(i=0;i'9') { *output++ = '0'; *output = '\0'; return; } } int x = atoi(s1); int y = atoi(s3); if(s2[0]=='+')
{ int result = x+y; itoa(result,output,10); } else if(s2[0]=='-') { int result = x-y; itoa(result,output,10); } else { *output++ = '0'; *output = '\0'; return; } } void main() { char str[] = {"10 - 23"}; char outstr[10]; int len = strlen(str); arithmetic(str,len,outstr); printf("%s\n",str); printf("%s\n",outstr); } 6.一组人(n 个),围成一圈,从某人开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人 (约瑟夫环是一个数学的应用问题:已知 n 个人(以编号 1,2,3...n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人又出列;依此规律重复下 去,直到圆桌周围的人全部出列。) #include #include #include #include typedef struct Node { int data; struct Node *next; }LinkList; LinkList *create(int n) { LinkList *p,*q,*head; int i=1; p=(LinkList*)malloc(sizeof(LinkList));
p->data=i; head=p; for(i=1;i<=n;i++) { q=(LinkList*)malloc(sizeof(LinkList)); q->data=i+1; p->next=q; p=q; //使链表尾连接链表头,形成循环链表 } p->next=head; return head; free(p); p=NULL; free(q); q=NULL; } void deletefun(LinkList *L,int m) { LinkList *p,*q,*temp; int i; p=L; while(p->next!=p) { for(i=1;inext; } printf("%5d",p->data); temp=p; q->next=p->next; p=p->next; free(temp); } printf("%5d\n",p->data); } int main() { int n=7,m=3; LinkList *head1; head1=create(n); deletefun(head1,m); return 0; }
7..输入一串字符,只包含“0-10”和“,”找出其中最小的数字和最大的数字(可能不止一个),输出最后剩余数 字个数。如 输入 “3,3,4,5,6,7,7” #include #include #include void main() { char str[100]; printf("输入一组字符串:\n"); scanf("%s",&str); int len=strlen(str); int array[100]; int count=0; for(int i=0;i='0'&&str[i]<='9') array[count++]=str[i]-'0'; } array[count]='\0'; int result=count; int min=array[0]; int max=array[0]; for(int j=0;jarray[j]) min=array[j]; } for(int k=0;k #include #define N 5
int main() { int Height[N]; int dmin; int H1,H2; int i,j,temp; printf("请输入一组身高在 170 到 190 之间的数据(共 5 个):\n"); for(int k=0;kHeight[j];j++) { temp=Height[j-1]; Height[j-1]=Height[j]; Height[j]=temp; } H1=Height[0]; H2=Height[1]; dmin=H2-H1; for(int m=2;m #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;
分享到:
收藏