[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
- [C/C++]2014年7月华为校招机试真题(一)
- [C/C++]2014年7月华为校招机试真题(一)
- [C/C++]2014年7月华为校招机试真题(一)
- [C/C++]2014年7月华为校招机试真题(二)
- 2014年7月华为校招机试真题1
- 2014年7月华为校招机试真题2
- 2014年7月华为校招机试真题3
- 2014年7月华为校招机试真题4
- 2013年9月华为成都笔试题 输入字符串计算数值(c语言)
- 2014年7月华为校招机试第一题答案另解--Java版本
- 2013年9月华为上机题
- 2014 8月华为软件类上机笔试
- 2014 8月华为软件类上机笔试题目解答
- 2014校园招聘之一(8月华为机试题)
- 2013年9月华为机试题目
- 2013年9月华为机试题目
- 2005年11月华为在南邮的招聘笔试题
- 2005年11月华为在南邮的招聘笔试题
- 学习笔记--快速排序
- dojo使用post方式发送数组请求
- 一些监控方面的软件
- poj 1463 树形dp或者贪心(树的最小点覆盖)
- Mysql存储过程与游标
- [C/C++]2014年7月华为校招机试真题(一)
- SQL语句-创建索引
- Windows下的主分区、扩展分区与逻辑分区
- jquery ajax 用户登入 异步判断
- ByteArrayOutputStream
- 【阅读】《head first javascript》第四章——决策
- 从[java.lang.OutOfMemoryError: Java heap space]中恢复
- SQL通配符过滤
- Permutation Sequence