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=1C++运算符优先级表见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以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数运算符 操作数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:期待更新吧!



原创粉丝点击