华为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;




0 0
原创粉丝点击