华为机试2020年机试第二题,小蜜蜂采蜜最短路径

第一题比较简单ac。
第二题:太可惜了,一个小细节int类型的决定了成败。

  1. 其实当时我自己没注意这个细节,因为调用sqrt的时候,本地ide报错返回int不匹配,我当时怎么就想都不想把sqrt强制转换为int呢。
  2. 本题给的测试用例也太巧的避免这个问题。

奇怪思路是对的,就是没通过。。。。。。。。。
第二题小蜜蜂采蜜,题目要求最终结果转int 我把每一段转int了,导致通过率一直为0,看到别人说才知道原因。难受香菇,怪我没读清楚题目咯,为什么不是全double,全int
太坑了!!!


#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;

//int TwopointSum(paira, pair b)
//{
//	return int(sqrt((b.first - a.first)*(b.first - a.first) + (b.second - //a.second)*(b.second - a.second)));
//}
double TwopointSum(pair<int, int>a, pair<int, int> b)
{
	return double(sqrt((b.first - a.first)*(b.first - a.first) + (b.second - a.second)*(b.second - a.second)));
}
//一个排列的总和
int OneofSum(vector<pair<int, int>>Input)
{

	int sum = 0; sum += TwopointSum(make_pair(0, 0), Input[0]);
	for (int i = 0; i <4; i++)
		sum += TwopointSum(Input[i], Input[i + 1]);

	sum += TwopointSum(make_pair(0, 0), Input[4]);
	return sum;
}
//全排列
void swap0(vector<pair<int, int>>&Input, int i, int j)
{
	swap(Input[i].first, Input[j].first);
	swap(Input[i].second, Input[j].second);
}
void  Permute(vector<pair<int, int>>&Input, int start, int &min){
	if (start >= 5)
	{
		if (min > OneofSum(Input))
			min = OneofSum(Input);		 
	}

	for (int i = start; i <5; i++)
	{
		swap0(Input, i, start);
		Permute(Input, start + 1, min);
		swap0(Input, i, start);
	}

}
int main(){
	 
	vector<pair<int, int>>Input(5);
	for (int i = 0; i < 5; i++)
	{
		cin >> Input[i].first >> Input[i].second;
	}
	int min = 100000000000;
	Permute(Input, 0, min);
	cout << min << endl;

 
	return 0;
}
//200 0 200 10 200 50 200 30 200 25

你可能感兴趣的:(面试笔记)