搜狐C++笔试编程题

搜狐C++笔试编程题一不知道为啥只通过了75%
题目输出与你最近的NPC坐标
地图大小128*128;
参数一:你的坐标x,
参数二:你的坐标y,
参数三:NPC个数,
参数四:NPC的坐标用,号隔开如x1,y1,x2,y2
所有参数均用逗号隔开,前后无空格
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
struct Point
{
int x = 0;
int y = 0;
};

int main()
{
vector<int> p;
string s;
cin >> s;
int temp = 0, size;
for (int i = 0; i < s.size(); i++)
{
if (s[i] != ',')
{
temp = temp * 10 + (int)(s[i] - '0');
}
else
{
p.push_back(temp);
temp = 0;
}
}
p.push_back(temp);
//for(int i=0;i<p.size();i++)
//cout<<p[i]<<" ";
// string s;
//cin>>s;
//for(int i=0;i<s.size();i++)
Point my;
my.x = p[0];
my.y = p[1];
size = p[2];
vector<Point> NPC(size);
int i = 0,small=100000,index=0,abx,aby;
for (; i < size; i++)
{
NPC[i].x = p[2 * i + 3] - my.x;
NPC[i].y = p[2 * i + 4] - my.y;
abx=abs(my.x);
aby=abs(my.y);
if(small>abx+aby){small=abx+aby;index=i;}
}

cout << "(" << NPC[index].x + my.x << "," << NPC[index].y + my.y << ")";
return 0;
}

#搜狐##笔试题目##题解#
全部评论
地图大小128*128;这只是给举例,不是数据范围。 应该数据范围很大,我用long long一样75%。
点赞 回复 分享
发布于 2018-09-15 22:05
我是算的直线距离,ac了,应该是题目理解问题
点赞 回复 分享
发布于 2018-09-15 22:19
输入有空格,要处理空格
点赞 回复 分享
发布于 2018-09-15 22:26
int main() {     int x, y, n;     vector<pair<int, int>> num;     string s;     getline(cin, s);     vector<int> index;     for (int i = 0; i < s.size(); i++)     {         if (s[i] == ',')             index.push_back(i);     }     index.push_back(s.size());     x = stoi(s.substr(0, index[0]));     y = stoi(s.substr(index[0] + 1, index[1] - index[0] - 1));     n = stoi(s.substr(index[1] + 1, index[2] - index[1] - 1));     for (int i = 3; i < index.size()-1; i+=2)     {         int a = stoi(s.substr(index[i - 1] + 1, index[i] - index[i - 1] - 1));         int b = stoi(s.substr(index[i] + 1, index[i + 1] - index[i] - 1));         num.push_back(make_pair(a, b));     }     int res = INT_MAX;     pair<int, int> ret;     for (int i = 0; i < num.size(); i++)     {         int dist = (num[i].first - x)*(num[i].first - x) + (num[i].second - y)*(num[i].second - y);         if (dist < res)         {             res = dist;             ret.first = num[i].first;             ret.second = num[i].second;         }     }     cout << "(" << ret.first << "," << ret.second << ")" << endl;     //system("pause");     return 0; } 还能再暴力点吗。。。没想到就ac了
点赞 回复 分享
发布于 2018-09-15 22:33
#include<iostream> using namespace std; int main() { int x,y,x1,y1; char c; int N; cin >> x >> c >> y >> c>> N; int a[3 * N]; int min = 128*128*2; for(int i = 0; i < 3 * N;i = i + 3) { cin >> c >>a[i] >> c >> a[i + 1]; a[i + 2] = (x - a[i])*(x - a[i]) + (y - a[i + 1])*(y - a[i + 1]); if(a[i + 2] < min) { min = a[i + 2]; x1 = a[i]; y1 = a[i + 1]; } } cout << "("<< x1 << "," << y1 << ")"<<endl; return 0; }
点赞 回复 分享
发布于 2018-09-16 09:53
为什么排版会这样
点赞 回复 分享
发布于 2018-09-16 09:53
一样75
点赞 回复 分享
发布于 2018-09-16 09:53

相关推荐

kl_我是东山啊:《相关公司:阿里巴巴》
投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
02-10 21:39
Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务