小米笔试凉,第一题是这样写吗

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

/*
输入用例:
目标信号值,下一行输入频段和损失值 freq:loss
找出距离最近的频段,输出损失值,保留一位小数,

2800
1950:10,3000:9,2500:15
*/
int main()
{
	int freq;
	cin >> freq;
	string str;
	cin >> str;
	vector<string> vec_str;
	vector<pair<int, int>> vec;
	int last = 0;
	for (int i = 0; i < str.size(); ++i)
	{
		if (',' == str[i])
		{
			vec_str.push_back(str.substr(last, i - last));
			last = i + 1;
		}
		if (str.size() - 1 == i)
			vec_str.push_back(str.substr(last, str.size() - last));
	}

	for (auto& x : vec_str)
	{
		for (int i = 0; i < x.size(); ++i)
		{
			if (':' == x[i])
			{
				int f = stoi(x.substr(0, i));
				int l = stoi(x.substr(i + 1, x.size() - i));
				vec.push_back(make_pair(f, l));
			}
		}
	}

	sort(vec.begin(), vec.end(), [](pair<int, int> e1, pair<int, int> e2) {
		return e2.first > e1.first;
		});
	//for (auto x : vec)
	//	cout << x.first << " " << x.second << endl;

	if (freq > vec[vec.size() - 1].first)
	{
		printf("%.1f", (double)vec[vec.size() - 1].second);
		return 0;
	}
	if (freq < vec[0].first)
	{
		printf("%.1f", (double)vec[0].second);
		return 0;
	}

	for (int i = 0; i < vec.size(); ++i)
	{
		int disright, disleft;
		if (vec[i].first > freq)
		{
			disright = vec[i].first - freq;
			disleft = freq - vec[i-1].first;
			cout << disright << " " << disleft << endl;
			if (disright == disleft)
				printf("%.1f", (vec[i].second + vec[i].first) / 2.0);
			if (disright > disleft)
				printf("%.1f", (double)vec[i - 1].second);
			if (disright < disleft)
				printf("%.1f", (double)vec[i].second);
			return 0;
		}
		
	}
	return 0;
}

#秋招 24届#
全部评论
对cpp选手太不友好了
点赞 回复 分享
发布于 2023-09-04 00:20 安徽
不用这么麻烦
点赞 回复 分享
发布于 2023-09-02 23:06 北京
第一题a了
点赞 回复 分享
发布于 2023-09-02 21:51 江苏
第一题就记录个gap,当当前的gap小于记录的gap,数组清0,存进去就好,一次遍历就出结果了。感觉这道题表达也有点问题
点赞 回复 分享
发布于 2023-09-02 21:41 上海
难受,用find和substr出了些问题,半天没做出来
点赞 回复 分享
发布于 2023-09-02 21:40 山东

相关推荐

评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务