笔试与面试集锦
2013-10-03 14:33
381 查看
文中部分内容参考Julyhttp://blog.csdn.net/v_july_v/article/details/11921021#comments
9月5日,华为2014校园招聘的机试题目
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
输入pInputStr: 输入字符串lInputLen: 输入字符串长度
输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
9月6日,网新恒天2014校园招聘笔试编程题
已知memcpy的函数为: void* memcpy(void *dest , const void* src , size_t count)其中dest是目的指针,src是源指针。不调用c++/c的memcpy库函数,请编写memcpy。
点评:老题,参考答案如下
9月9日,迅雷2014校招笔试编程题:
已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。
链表结点的结构类型定义如下:
请完成函数void difference(node** LA , node* LB)
点评:参考答案或更多题目请参见:http://blog.csdn.net/hackbuteer1/article/details/11482103。
1、2、3、4、5、6六行代码依次为
pa = *LA;
pb && pa->elem != pb->elem
pb
pa->next
pre->next
pre = pa;
代码中的指针pa用于指向集合A的元素;pb指向集合B的元素;临时指针q指向需要被删除的元素;pre用于实现删除时结点的链接,与pa保持所指结点的前后继关系。
9月5日,华为2014校园招聘的机试题目
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
输入pInputStr: 输入字符串lInputLen: 输入字符串长度
输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
# include <iostream> # include <string> # include <sstream> using namespace std; const char in[]= "abbcccddddfffffffffffffffff"; const long inLen=sizeof(in); char out[inLen]; void StringZip(const char *pInputStr,long InputLen,char *pOutputStr){ int count=1; char a=*(pInputStr++); char b; while(InputLen>1){ InputLen--; b=*(pInputStr++); if(b==a){ count++; }else{ if(count>1){ stringstream ss; string str; ss<<count; ss>>str; int l=0; while(l<str.length()){ *(pOutputStr++)=(char)str.at(l); l++; } count=1; } *(pOutputStr++)=a; a=b; } } } void main(){ StringZip(in,inLen,out); cout<<in<<endl; cout<<out<<endl; }
9月6日,网新恒天2014校园招聘笔试编程题
已知memcpy的函数为: void* memcpy(void *dest , const void* src , size_t count)其中dest是目的指针,src是源指针。不调用c++/c的memcpy库函数,请编写memcpy。
点评:老题,参考答案如下
void* memcpy(void *dst, const void *src, size_t count) { //安全检查 assert( (dst != NULL) && (src != NULL) ); unsigned char *pdst = (unsigned char *)dst; const unsigned char *psrc = (const unsigned char *)src; //防止内存重复 assert(!(psrc<=pdst && pdst<psrc+count)); assert(!(pdst<=psrc && psrc<pdst+count)); while(count--) { *(pdst++) = *(psrc++); } return dst; }
9月9日,迅雷2014校招笔试编程题:
已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。
链表结点的结构类型定义如下:
struct node { int elem; node* next; };
void difference(node** LA , node* LB) { node *pa , *pb , *pre , *q; pre = NULL; //1 while(pa) { pb = LB; while( ) //2 pb = pb->next; if( ) //3 { if(!pre) *LA = ; //4 else = pa->next; //5 q = pa; pa = pa->next; free(q); } else { ; //6 pa = pa->next; } } }
请完成函数void difference(node** LA , node* LB)
点评:参考答案或更多题目请参见:http://blog.csdn.net/hackbuteer1/article/details/11482103。
1、2、3、4、5、6六行代码依次为
pa = *LA;
pb && pa->elem != pb->elem
pb
pa->next
pre->next
pre = pa;
代码中的指针pa用于指向集合A的元素;pb指向集合B的元素;临时指针q指向需要被删除的元素;pre用于实现删除时结点的链接,与pa保持所指结点的前后继关系。
相关文章推荐
- 【Internship&Interview】2017阿里实习笔试/面试问题集锦
- 【转】Android面试笔试集锦
- [面试] 各大IT公司校园招聘程序猿笔试、面试题集锦
- 机器学习笔试面试系列算法集锦
- 嵌入式Linux驱动工程师/BSP开发工程师面试笔试题集锦
- 面试/笔试第三弹 —— 数据库面试问题集锦
- android面试题目大全<完结部分>,android笔试题目集锦
- c++面试笔试集锦
- [面试] 各大IT公司校园招聘程序猿笔试、面试题集锦
- Android——面试笔试集锦
- 嵌入式linux驱动工程师/BSP开发工程师面试笔试题(集锦)
- 华为面试笔试题集锦
- Java面试笔试题目集锦
- Android面试笔试集锦
- 面试珠玑 各大IT公司校园招聘程序猿笔试、面试题集锦
- android面试题目大全<完结部分>,android笔试题目集锦
- 2017最新java工程师面试笔试题集锦(一)
- 2017最新java工程师面试笔试题集锦(二)
- [置顶] Android面试题目大全<完结部分>,Android笔试题目集锦
- android面试题目大全<完结部分>,android笔试题目集锦