2014年笔试题1
来源:互联网 发布:js用偶数奇数隔行变色 编辑:程序博客网 时间:2024/06/07 23:47
No1.微软2014年校招笔试-----运算符优先级
int i=0;i+=i>0?i--:i++;printf("%d\n",i);
结果是?1
分析:++,--〉三目运算符〉+=,于是可以拆分成以下代码:
i++;i--;i>0?0:1(执行完这一步i=0);i+=1;最后得到i=1。C++运算符优先级表见http://blog.csdn.net/nicky_zs/article/details/4053146
No2.迅雷2014-----多态
class parent{public:virtual void output();};void parent::output(){printf("parent!");}class son : public parent{public:virtual void output();};void son::output(){printf("son!");}int main(){son s;memset(&s , 0 , sizeof(s)); parent& p = s; p.output();}结果:程序出错
分析:0x0000 0000是不能被访问的,memset强制使p指向了0x0000 0000发生了错误,把memset(&s , 0 , sizeof(s))去掉,输出:son!这是由于使用虚函数,实现了多态。
No3.美团网-----链表翻转
给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现
思路:首先实现一个链表p1指针到p2的逆转void trans(node *p1,node *p2),然后以步长k遍历翻转
No3.华为机考
①通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
//字符过滤#include<iostream>using namespace std;long stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);int main(){char str[]="abacacde";int size=sizeof(str)/sizeof(char);char *pstr=new char[size];long str_len=stringFilter(str,size-1,pstr);*(pstr+str_len)='\0';cout<<pstr<<endl;delete []pstr;return 0;}long stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr){long lOutputLen=0;for(int i=0;i<lInputLen;i++){int flag=0; for(int j=0;j<lOutputLen;j++){ if(lOutputLen==0) {*pOutputStr=*pInputStr;lOutputLen++;} else if(*(pInputStr+i)==*(pOutputStr+j)) flag=1;}if(flag==0) {*(pOutputStr+lOutputLen)=*(pInputStr+i);lOutputLen++;}}return lOutputLen;}
②通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc";
压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
//字符压缩#include<iostream>using namespace std;long stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);int main(){char str[]="aacddddeexxyyokkk";int size=sizeof(str)/sizeof(char);char *pstr=new char[size];long pstr_size=stringZip(str,size-1,pstr);*(pstr+pstr_size)='\0';cout<<pstr<<endl;delete []pstr;return 0;}long stringZip(const char *pInputStr, long lInputLen, char *pOutputStr){long lOutputLen=0;int i=0;while(i<lInputLen){int j=0;while(*(pInputStr+i+j)==*(pInputStr+i)) ++j; if(j>1){*(pOutputStr+lOutputLen)='0'+j; *(pOutputStr+lOutputLen+1)=*(pInputStr+i);lOutputLen+=2;i+=j;} else { *(pOutputStr+lOutputLen)=*(pInputStr+i); lOutputLen++; i++; } } return lOutputLen;}
③通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:
操作数为正整数,不需要考虑计算结果溢出的情况;
若输入算式格式错误,输出结果为“0”。
要求实现函数:
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
//数字加减法#include<iostream>using namespace std;long arithmatic(const char *pInputStr, long lInputLen, char *pOutputStr);int main(){char str[]="35 - 49";int size=sizeof(str)/sizeof(char);char *pstr=new char[size];long pstr_size=arithmatic(str,size-1,pstr);if(pstr_size>0){*(pstr+pstr_size)='\0';cout<<pstr<<endl;}else cout<<"error!"<<endl;delete []pstr;return 0;}long arithmatic(const char *pInputStr, long lInputLen, char *pOutputStr){long lOutputLen=0;int i=0,num1=0,num2=0,flag=0;char op;//lOutputLen记录输出字符串长度;num1,num2记录操作数,;flag表示第一个操作数读取完成标志;op表示操作符while(i<lInputLen){//记录操作数,操作符 while((*(pInputStr+i))>='0'&&(*(pInputStr+i))<='9'){ if(flag==0) num1=num1*10+*(pInputStr+i)-'0'; else num2=num2*10+*(pInputStr+i)-'0'; i++;} flag=1; if(i<lInputLen&&*(pInputStr+i)==' '&&(*(pInputStr+i+1)=='+'||*(pInputStr+i+1)=='-')&&*(pInputStr+i+2)==' ') {op=*(pInputStr+i+1);i+=3;} else if(i>=lInputLen) break; else return -1;}switch(op){case '+':num1+=num2;break;case '-':num1-=num2;break;default:return -1;break;}//把结果写入到输出字符串if(num1<0){*(pOutputStr)='-';lOutputLen++;num1=-num1;}while(num1>0){int num=num1;int len=1;while(num>10){num/=10;len*=10;}if(num1>10)*(pOutputStr+lOutputLen)=num+'0';else *(pOutputStr+lOutputLen)=num1+'0';lOutputLen++;num1-=(int)(*(pOutputStr+lOutputLen-1)-'0')*len;}return lOutputLen;}
ps:期待更新吧!
- 2014年笔试题1
- 微软2014年笔试题
- 2014年百度研发笔试算法题1解法
- IGT 2014年校园招聘笔试题
- 腾讯2014年春季笔试题
- 2014年阿里巴巴前端工程师笔试题
- Works applications 2014笔试题(1)
- 2014 WAP校园招聘笔试题1
- 2014阿里巴巴笔试题
- 2014人人笔试题
- 阿里2014笔试题
- 2014阿里巴巴笔试题
- 2014人人笔试题
- 2014--百度笔试题
- 2014百度笔试题
- 2014hulu笔试题
- 2014笔试题
- 腾讯2014笔试题
- 网络摄像机阿里记录。
- 简单asp.net文件的上传
- 数据挖掘技术
- MySQL性能优化的最佳20+条经验
- Tutorial 11 - Concatenating Transformations
- 2014年笔试题1
- 对Kalman(卡尔曼)滤波器的理解
- 2014 百度研发工程师笔试题
- 使用ASP.NET上传多个文件到服务器
- Mysql创建、删除用户、查询所有用户等教程,提升您的MYSQL安全度!
- 关于加密的一些概念
- oracle imp 导数据,1个G左右,大概需要25分钟。改天测试下expdp耗时
- [转帖] verilog开发经验杂谈
- Qt5学习之路(vs2012下创建一个QT应用程序)2013-10-14