一共有三个题,第三个忘记了先记着前两个,代码都是基于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;
}
第三题之后补充