[C/C++]2014年7月华为校招机试真题(一)

来源:互联网 发布:ubuntu su认证失败 编辑:程序博客网 时间:2024/04/28 17:58

第一题(60分):

       按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”

我写的代码如下:

#include <iostream>#include <vector>#include <string>using namespace std;void cutString(vector<string> &str,unsigned int stringLength);int main(){   int stringCount=0;  unsigned  int stringLength =0;   vector<string> str;cout<<"请输入两个整数:"<<endl;    cin>>stringCount>>stringLength;cout<<stringCount<<" "<<stringLength<<endl;for (int i=0;i<stringCount;++i){string s;cin>>s;str.push_back(s);}//字符串处理   cutString(str,stringLength);   //输出处理后的字符串for (vector<string>::iterator iter=str.begin();iter!=str.end();++iter){cout<<*iter<<endl;}}//传的参数是引用,可以避免对对象的拷贝void cutString(vector<string> &str, unsigned int stringLength){    for (vector<string>::iterator iter=str.begin();iter!=str.end();++iter)   //遍历字符串{if (iter->size()>stringLength){string s;int cut_n=iter->size()/stringLength;  //计算要剪切的次数for (int k=0; k<cut_n;++k){int j=iter->size() -stringLength;s.clear();for (int i=0;i<j;++i)                   //保存多余的字符串{s.push_back((*iter)[stringLength+i]);}iter->erase(stringLength);       //删除从stringLength开始至末尾的所有字符串iter=str.insert(iter+1,s);  }}if (iter->size()<stringLength)        //字符串长度小于给定长度,补零{int i=stringLength-iter->size();   //计算要补零的个数while (i--){iter->push_back('0');}}}}



还是一道第一题,我另一个同学记得

第一题:拼音转数字

输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:

描述:      拼音        yi  er  san  si  wu  liu  qi  ba  jiu

      阿拉伯数字        1   2   3      4   5    6    7   8   9

输入字符只包含小写字母,所有字符都可以正好匹配


运行时间限制:无限制

内存限制:       无限制

输入:              一行字符串,长度小于1000

输出:              一行字符(数字)串

样例输入:       yiersansi

样例输出:       1234

我的代码:

#include <iostream>#include <string>#include<vector>using namespace std;int main(){string s;vector<int> number;cout<<"请输入一串字符串"<<endl;getline(cin,s);for(string::size_type i=0;i<s.size();++i){switch(s[i]){case 'y':   //1{number.push_back(1);++i;}break;case 'e':    //2{number.push_back(2);++i;}break;case 's':   //3,4{if(s[++i]=='i')   //4{number.push_back(4);}else{number.push_back(3);++i;  //i已经加过一次,所以只用加一次就行了}}break;case 'w':    //5{number.push_back(5);++i;}break;case 'l':    //6{number.push_back(6);i+=2;}break;case 'q':   //7{number.push_back(7);i++;}break;case 'b':   //8{number.push_back(8);i++;}break;case 'j':    //9{number.push_back(9);i+=2;}break;default:break;}}cout<<s<<endl;//打印vector<int>::iterator iter=number.begin();while(iter!=number.end()){cout<<*iter++;}cout<<endl;return 0;}


第二题:去除重复字符并排序

运行时间限制:无限制

内容限制:       无限制

输入:              字符串

输出:              去除重复字符并排序的字符串

样例输入:       aabcdefff

样例输出:       abcdef

我的代码:

#include <iostream>#include <string>#include<vector>#include <algorithm>  //算法using namespace std;int main(){string s;cout<<"请输入一串字符串"<<endl;getline(cin,s);//排序sort(begin(s),end(s));  //sort 在头文件<algorithm>string::iterator iter=s.begin();    while(iter!=(s.end()-1))  //这里必须是-1,否则下面的iter+1会越界;{if(*iter==*(iter+1)){iter=s.erase(iter); //返回被删除元素后一个元素的迭代器}else{++iter;}}cout<<s<<endl;//打印return 0;}



第三题:等式变换

输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。

1 2 3 4 5 6 7 8 9 = X

比如:

12-34+5-67+89 = 5

1+23+4-5+6-7-8-9 = 5

请编写程序,统计满足输入整数的所有整数个数。

输入:       正整数,等式右边的数字

输出:       使该等式成立的个数

样例输入:5

样例输出:23

代码:

可以参考:

http://blog.csdn.net/feifeiyanfeifeia/article/details/38143419

0 0
原创粉丝点击