农行研发中心软开2020秋招编程题全记录

7 篇文章 0 订阅
7 篇文章 0 订阅

一共有三个题,第三个忘记了先记着前两个,代码都是基于C++,基本上前两个都是中规中矩暴力常规解法,考察字符串的一些操作,我这里没怎么用api也暂时未考虑特殊输入:

第一题:三进制表示火星文:数字0,1,2分别对应字符@,$,&。输入数字123,输出字符串“$$$&@”(即11120)

#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;

string GetThreeShift(int num)
{
	//cout << num<< endl;
	int quotient=0xffffffff;//商
	int remainder=0xffffffff;//余数(这个需要存起来)
	string resultReversed;
	while(quotient!=0)
	{
		quotient = num / 3;
		remainder = num % 3;
		if (remainder==0)
		{
			resultReversed.push_back('@');
		}
		else if (remainder == 1)
		{
			resultReversed.push_back('$');
		}
		else
		{
			resultReversed.push_back('&');
		}
		num = quotient;
	}
        //下面我写了三个反转字符串的方式,可任意选择:
        //方式一:
	//int len = resultReversed.size();
	//string result;
	//for (int i = len - 1; i >= 0;--i)
	//{
	//	result.push_back(resultReversed[i]);
	//}
	//return result;
	//方式二:
	//reverse(resultReversed.begin(),resultReversed.end());
	//return resultReversed;
        //方式三:
	int len = resultReversed.size();
	int mid = (0 + len) / 2;
	int temp = 0;
	for (int i = 0; i < mid; ++i)
	{
		temp = resultReversed[i];
		resultReversed[i] = resultReversed[len - 1 - i];
		resultReversed[len - 1 - i] = temp;
	}
	return resultReversed;
}

int main()
{
//1.测试代码:	
	int num = 123;
	string result = GetThreeShift(num);
	cout << result<< endl;
}

第二题:二维平面内给定四个坐标,求出其质心(质心坐标的x,y为四个x,y坐标分别取平均值求得),得出距离之心距离最近的点的索引。例如输入:{”1,1“,”1,2“,”1,3“,”2,2“},输出1((1,2)距离质心(1.25,2)最近)

#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;

int getXCoordinate(string co)
{
	//int len = co.size();
	int sum = 0;
	for (int i = 0; co[i] != ','; ++i)
	{
		int num = co[i] - '0';
		sum = sum * 10 + num;
	}
	return sum;
}
int getYCoordinate(string co)
{
	int len = co.size();
	int i = 0;
	while (co[i] != ',')
	{
		++i;
	}
	++i;
	int sum = 0;
	for (int j = i; j<len;++j)
	{
		int num = co[i] - '0';
		sum = sum *10+ num;
	}
	return sum;
}
int getDistance(int x,int y,int meanx,int meany)
{
	int distance = (x-meanx) ^ 2 + (y-meany) ^ 2;
	return distance;
}
int GetResult(vector<string> coordinate)
{
	string coordinate1 = coordinate[0];
	string coordinate2 = coordinate[1];
	string coordinate3 = coordinate[2];
	string coordinate4 = coordinate[3];
	int x1 = getXCoordinate(coordinate1);
	int y1 = getYCoordinate(coordinate1);
	int x2 = getXCoordinate(coordinate2);
	int y2 = getYCoordinate(coordinate2);
	int x3 = getXCoordinate(coordinate3);
	int y3 = getYCoordinate(coordinate3);
	int x4 = getXCoordinate(coordinate4);
	int y4 = getYCoordinate(coordinate4);
	int meanX = (x1 + x2 + x3 + x4) / 4;
	int meanY = (y1+y2+y3+y4) / 4;
	int dis1 = getDistance(x1,y1,meanX,meanY);
	int dis2 = getDistance(x2,y2,meanX,meanY);
	int dis3 = getDistance(x3,y3,meanX,meanY);
	int dis4 = getDistance(x4,y4,meanX,meanY);
	vector<int> result;
	result.push_back(dis1);
	result.push_back(dis2);
	result.push_back(dis3);
	result.push_back(dis4);
	int min = result[0];
	int index = 0;
	for (int i = 0; i < 4; ++i)
	{
		if (result[i] < min)
		{
			min = result[i];
			index = i;
		}
	}
	return index;
}
int main()
{
//2.测试代码:
	vector<string> coordinate;
	coordinate.push_back("1,1");
	coordinate.push_back("1,2");
	coordinate.push_back("1,3");
	coordinate.push_back("2,2");
	int index=GetResult(coordinate);
	cout << index<< endl;
	return 0;
}

第三题之后补充

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值