华为2015机试题目汇总

1、输入一行,输出一行,直到文件末尾,除去重复的数。

华为2015机试题目汇总_第1张图片

/*
STL解决
*/
#include
#include
#include
#include
using namespace std;
void GetNoReplicates()
{
	string str;

	vector result;
	vector::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 copy;
				copy.push_back(result[0]);
				for(int j=1; j
/*
set记录排除集
*/
#include
#include
#include
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 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

2、天数问题

输入:MM-YYYY,MM为月份,YYYY为年份,例如:08-2014

输出:指定年份和月份的天数。例如,08-2014,对应输出为31。

#include
#include
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<

(2)字符串处理

输入:由数字和字母组成的字符串,例如:333aaabb55ppin

输出:数字后面的连续出现的(2个或多个)相同字符(数字或者字符),删去一个,非数字后面的不要删除,例如,对应输出为:33aaabb5ppin。

#include
#include
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<

(3)输入法编码

输入法的编码原理为:根据已有编码表,当输入拼音和数字后输出对应的字符。例如:

有如下编码:喜_xi      洗_xi    系_xi     无_wu    五_wu(字符和拼音之间用下划线隔开),那么当输入xi2时,结果为拼音位xi的第二个字符,即“洗”。

输入:Code

            喜_xi

            洗_xi

            系_xi

            无_wu

            五_wu

            Search

            xi2

            End

输出:洗

注意:当在编码表中查询不到时,结果为“Error”;当输入的拼音没有数字,即"xi"时,输出结果为:拼音为xi的前若干个字符,但是最多输出5个,即输出:喜;洗;系。

#include
#include
#include
using namespace std;
void Coding()
{
	string str;
	multimap 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::iterator iter=table.find(key);
			size_t size=table.count(key);
			if(size==0||(digit!=0&&sizesecond<second<(piYing,hangZhi));
		}
		else
		{
			input=hangZhi;
		}			
				
	}

}
void main()
{
	Coding();
}

是给出一个(1,10000]之间的数字n,让你输出里面所有的完数。完数神马的不懂?请自行百度= =

#include
#include
using namespace std;
vector GetAllNum(int n)
{
	int num=2;
	vector result;
	vector 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::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 result=GetAllNum(n);
	for(vector::iterator iter=result.begin();iter!=result.end();iter++)
		cout<<*iter<

华为2015机试题目汇总_第2张图片

#include
#include
#include
using namespace std;
void GetString()
{
	int lines=0;
	int sizes=0;
	string str;
	vector 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

华为2015机试题目汇总_第3张图片

#include
#include
#include
using namespace std;
const int nums=26;
bool compare(char a,char b)
{
	return a>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<

(1)打印输出乘法口诀法

  比如输入n

    n=5;

  打印输出

  1

  2,4

  3,6,9

  4,8,12,16

  5,10,15,20,25

#include
using namespace std;
void Multiply()
{
	int n;
	cin>>n;
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=i; j++)
		{
			cout<

(2)判断两个字符串的匹配程度

    存有n个名字{"xiaolin","han mei","li lin","xuelin","huangyu","zhang xue"}

  输入的是一个字符串“li teng”,输出是最匹配的名字,假如有两个匹配,就输出第一个。比如li teng和li lin,l和li,lin,有两个匹配,就只能有一个。所以匹配数为3。

#include
#include
#include
using namespace std;
void Fit()
{
	vector 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; imax)
			{
				max=k;
				fit=table[i];
			}
			j=temp;
		}
	}
	cout<>str2;
	getline(cin,str3);
	cout<
这题注意cin和scanf输入时遇到空白就结束,输入要用getline;




你可能感兴趣的:(面试题集合)