2017年华为大牛专场(软件类)校招笔试回忆版

题目不难,对算法要求不高,但要仔细考虑一些特殊的测试用例。

1、十进制转十二进制

十进制:1,2,3,4,5,6,7,8,9,10,11  分别对应十二进制1,2,3,4,5,6,7,8,9,A,B

比如输入:34  输出 2A

注意考虑输入:0时应该输出:0,同时可能需要考虑负数的情况(但测试用例好像都是正数,所以单考虑正数也通过了)。

#include
#include
#include
#include
#include
using namespace std;
void solve(int num);
int main()
{
	int num;
	while(cin>>num)
	{
		solve(num);
	}
	return 0;
}
void solve(int num)
{
	if(num==0)
	{
		cout<<"0"< s;
	while(num)
	{
		if(num%12==10)
		{
			c='A';
		}
		else if(num%12==11)
		{
			c='B';
		}
		else
		{
			c=num%12+'0';
		}
		s.push_back(c);
		num=num/12;
	}
	vector::iterator vi;
	for(vi=s.end()-1;vi>=s.begin();vi--)
	{
		cout<<(*vi);
	}
	cout<

2、缘分匹配度

题目太长了,只记得大概的意思:

给定的男女相亲对数N,输入一个长度为2*N的数组,男生在数组中站的位置往前数组累加和s1,女在数组中站的位置往后数组累加和s2,如果s1==s2说明男女匹配成功。比如对已N=3 输入的数组为3 6 2 4 5 2,男生站第3个位置往前累加和为2+6+3=11,女生站第4个位置往后累加和为4+5+2=11,说明匹配成功;男生站第6个位置往前累加和为2+5+4+2+6+3=22,女生站第1个位置往后累加和为3+6+2+4+5+2=11,说明匹配成功;

输入说明:

第一行输入N;

第二行连续输入n个正整数,注意正整数输入个数要满足n=2*N,否则函数返回-1;

输出说明:

返回输入数组中能匹配成功的对数

3、求字符串中最长回文

输入一串包含空格的字符串,用空格分隔字符串并找出字符串中最长的回文,如果存在多个最长回文,则一同输出,同时各回文间用','号隔开

比如输入:

a aba dd f

a aba dfd hj

对应输出分别为:

aba

aba,dfd

注意:这里的空格可能不止一个(如a           aba        a)   

当时的思路:首先依据空格将各字符串分割出来,然后使用reverse()函数判断每个字符串是否为回文(即翻转后的字符串与原字符串相等,说明该字符串为回文),最后在回文字符串中中找出最长的那个回文字符串。

你可能感兴趣的:(华为在线编程)