华为2015机试题目汇总
来源:互联网 发布:淘宝售后的服务流程 编辑:程序博客网 时间:2024/05/01 07:05
1、输入一行,输出一行,直到文件末尾,除去重复的数。
/*STL解决*/#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;void GetNoReplicates(){string str;vector<int> result;vector<int>::iterator iter;while(cin>>str){int i=0;int temp;while(str[i]!='\0'){temp=0;while(str[i]!='\0'&&str[i]!=','){temp=10*temp+str[i]-'0';i++;}if(str[i]=='\0'){ result.push_back(temp); vector<int> copy;copy.push_back(result[0]);for(int j=1; j<result.size();j++){iter=find(copy.begin(),copy.end(),result[j]);if(iter==copy.end()){copy.push_back(result[j]);}}for(int k=0;k<copy.size();k++){if(k==copy.size()-1){cout<<copy[k]<<endl;}else{cout<<copy[k]<<",";}}result.clear();break;}else{result.push_back(temp);i++;}}}}void main(){GetNoReplicates();}
/*set记录排除集*/#include<iostream>#include<string>#include<set>using namespace std;void GetNoReplicates(){int temp[4096];int result[4096];string str;int num;int j=0;memset(temp,0,sizeof(int)*4096);set<int> hash;while(cin>>str){int i=0;int r=0;while(str[i]!='\0'){num=0;while(str[i]!='\0'&&str[i]!=','){num=10*num+str[i]-'0';i++;}if(str[i]=='\0'){temp[j++]=num;result[r++]=temp[0];hash.insert(temp[0]);for(int k=1;k<j;k++){if(0==hash.count(temp[k])){result[r++]=temp[k];hash.insert(temp[k]);}}for(k=0;k<r;k++){if(k==r-1)cout<<result[k]<<endl;elsecout<<result[k]<<",";}j=0;hash.clear();break;}else{temp[j++]=num;i++;}}}}void main(){GetNoReplicates();}
2、天数问题
输入:MM-YYYY,MM为月份,YYYY为年份,例如:08-2014
输出:指定年份和月份的天数。例如,08-2014,对应输出为31。
#include<iostream>#include<string>using namespace std;void GetDays(){string str;while(cin>>str){int i=0;int days; int year=0,month=0;while(str[i]!='\0'&&str[i]!='-'){month=month*10+str[i]-'0';i++;}if(str[i]!='\0'){i++;while(str[i]!='\0'){year=year*10+str[i]-'0';i++;}}switch(month){case 1:case 3:case 5: case 7:case 8:case 10: case 12:days=31;break;case 4:case 6: case 9:case 11:days=30;break;case 2:if(year%4==0)days=29;else days=28;}cout<<days<<endl;}}void main(){GetDays();}
(2)字符串处理
输入:由数字和字母组成的字符串,例如:333aaabb55ppin
输出:数字后面的连续出现的(2个或多个)相同字符(数字或者字符),删去一个,非数字后面的不要删除,例如,对应输出为:33aaabb5ppin。
#include<iostream>#include<string>using namespace std;void DeleteRepeatDigits(){string str;while(cin>>str){int i=0;int j=0;while(str[i]!='\0'){if(str[i]>'9'||str[i]<'0'){str[j++]=str[i++];}else{if((i-1>=0)&&(str[i-1]==str[i])&&(str[i]!=str[i+1])){i++;}else{str[j++]=str[i++];}}}str[j]='\0';cout<<str<<endl;}}void main(){DeleteRepeatDigits();}
(3)输入法编码
输入法的编码原理为:根据已有编码表,当输入拼音和数字后输出对应的字符。例如:
有如下编码:喜_xi 洗_xi 系_xi 无_wu 五_wu(字符和拼音之间用下划线隔开),那么当输入xi2时,结果为拼音位xi的第二个字符,即“洗”。
输入:Code
喜_xi
洗_xi
系_xi
无_wu
五_wu
Search
xi2
End
输出:洗
注意:当在编码表中查询不到时,结果为“Error”;当输入的拼音没有数字,即"xi"时,输出结果为:拼音为xi的前若干个字符,但是最多输出5个,即输出:喜;洗;系。
#include<iostream>#include<string>#include<map>using namespace std;void Coding(){string str;multimap<string,string> table;string input;while(cin>>str){if(str=="Search"){cin>>str;}if(str=="End"){int i=0;string key;int digit=0;while(input[i]!='\0'&&(input[i]>'9'||input[i]<'0')){key+=input[i++];}while(input[i]!='\0'){digit=digit*10+input[i++]-'0';}multimap<string,string>::iterator iter=table.find(key);size_t size=table.count(key);if(size==0||(digit!=0&&size<digit)){cout<<"Error"<<endl;}else{ if(digit==0) { for(int i=0;i<size;i++,iter++) { cout<<iter->second<<endl; } } else { for(int i=1;i<digit;i++,iter++); cout<<iter->second<<endl; } }break;}int i=0;string piYing;string hangZhi;while(str[i]!='\0'&&str[i]!='_'){hangZhi+=str[i++];}if(str[i]=='_'){i++;while(str[i]!='\0'){piYing+=str[i++];}table.insert(make_pair<string,string>(piYing,hangZhi));}else{input=hangZhi;}}}void main(){Coding();}
是给出一个(1,10000]之间的数字n,让你输出里面所有的完数。完数神马的不懂?请自行百度= =
#include<iostream>#include<vector>using namespace std;vector<int> GetAllNum(int n){int num=2;vector<int> result;vector<int> yueShu;int sum;while(num<=n){int i=2;sum=0;yueShu.clear();while(i<=num){if(num%i==0){yueShu.push_back(num/i);}i++;}for(vector<int>::iterator iter=yueShu.begin();iter!=yueShu.end();iter++)sum+=*iter;if(sum==num)result.push_back(num);num++;}return result;}void main(){int n;cin>>n;vector<int> result=GetAllNum(n);for(vector<int>::iterator iter=result.begin();iter!=result.end();iter++)cout<<*iter<<endl;}
#include<iostream>#include<string>#include<vector>using namespace std;void GetString(){int lines=0;int sizes=0;string str;vector<string> input;string linesSizes;cin>>linesSizes;int k=0;while(linesSizes[k]!='\0'&&linesSizes[k]!=','){lines+=lines*10+linesSizes[k]-'0';k++;}if(linesSizes[k]==',') k++;while(linesSizes[k]!='\0'){sizes+=sizes*10+linesSizes[k]-'0';k++;}while(lines--){cin>>str;input.push_back(str);}for(int i=0;i<input.size();i++){int j=0;int num=0;while(input[i][j]!='\0'){num++;cout<<input[i][j++];if(num==sizes){num=0;cout<<endl;}}if(num<sizes){for(int i=num;i<=sizes;i++)cout<<"0";cout<<endl;}}}void main(){GetString();}
#include<iostream>#include<string>#include<algorithm>using namespace std;const int nums=26;bool compare(char a,char b){return a<b; }void GetNonRepeat(){char str[256];int hash[nums];memset(hash,0,sizeof(hash));cin>>str;int i=0;int index=0;while(str[i]!='\0'){if(hash[(str[i]-'a')]==1){i++;}else{hash[(str[i]-'a')]=1;str[index++]=str[i++];}}str[index]='\0';sort(str,str+index,compare);cout<<str<<endl;}void main(){GetNonRepeat();}
(1)打印输出乘法口诀法
比如输入n
n=5;
打印输出
1
2,4
3,6,9
4,8,12,16
5,10,15,20,25
#include<iostream>using namespace std;void Multiply(){int n;cin>>n;for(int i=1; i<=n; i++){for(int j=1; j<=i; j++){cout<<j*i<<" ";}cout<<endl;}}void main(){Multiply();}
(2)判断两个字符串的匹配程度
存有n个名字{"xiaolin","han mei","li lin","xuelin","huangyu","zhang xue"}
输入的是一个字符串“li teng”,输出是最匹配的名字,假如有两个匹配,就输出第一个。比如li teng和li lin,l和li,lin,有两个匹配,就只能有一个。所以匹配数为3。
#include<string>#include<iostream>#include<vector>using namespace std;void Fit(){vector<string> table;table.push_back("xiaolin");table.push_back("han mei");table.push_back("li lin");table.push_back("xuelin");table.push_back("huangyu");table.push_back("zhang xue");string input;//cin>>input;getline(cin,input);int max=0;int temp=0;int k=0;string fit;for(int i=0; i<table.size(); i++){for(int j=0; j<table[i].size(); j++){k=0;temp=j;while(input[k]!='\0'&&table[i][j]!='\0'&&input[k]==table[i][j]){k++;j++;}if(k>max){max=k;fit=table[i];}j=temp;}}cout<<fit<<" "<<max<<endl;system("pause");}void main(){Fit();//char str1[10];//char str2[10];//string str3;/*scanf("%s",str1);//忽略开头空白,遇到空结尾 输入 123 123输出123 str1出必须是char型字符数组cin>>str2;getline(cin,str3);cout<<str1<<endl;cout<<str2<<endl;//忽略开头空白,遇到空结尾 输入 123 123输出123cout<<str3<<endl;//不忽略开头空白,遇到Enter结束 输入 123 123输出 123 123*/}
这题注意cin和scanf输入时遇到空白就结束,输入要用getline;
- 华为2015机试题目汇总
- 华为机试题目
- 华为机试题目
- 2015华为机试题
- 华为机试题 2015
- 华为机试题2015
- 2015华为机试题
- 华为2015校园招聘机试题目
- 2013华为机试与面试题汇总
- 2013华为机试与面试题汇总
- 2014华为机试题目
- 华为2014机试题目
- 华为2014机试题目
- 华为机试题目整理
- 华为机试题目 若干
- 华为2016机试题目
- 2015华为机试题整理
- 华为2015机试题一
- ios AES128加密解密算法
- ProtelDXP高级功能
- githubgrep
- linux下检测网卡与网线连通状态
- nyoj767因子和
- 华为2015机试题目汇总
- 寄存器虚拟机
- 日通过人员如图一突然又热又突然一天v
- WOJ(记忆化搜索)
- hdu 1254(推箱子游戏bfs+状态标记)
- 字节码解释执行
- ubuntu 待机休眠
- UVA - 704 Colour Hash(双向bfs+hash+线性表)
- 软件密码学基础