【华为OD:C++机试】Day-4

news2025/4/6 3:49:31

目录

🌷1. 排队游戏:

🌷2. 购物:

🌷3. 划分字符串:

🌷4. MELON 的难题:

🌷5. 荒岛求生:

🌷6. 通过软盘拷贝文件:

🌷7. 数字序列比大小:

🌷8. 树状结构查询:

🌷9. 评论转换输出:

🌷10. 找出两个整数数组中同时出现的整数:



🌷1. 排队游戏:

题目描述:

code: 

// 排队游戏
#include <iostream>
#include <vector>
#include <unordered_set>

using namespace std;

int sum(const vector<int>& capacity, int n)
{
	int count = 0;
	for (int i = 0; i < n; i++)
		if (capacity[i] > capacity[n])
			count++;
	return count;
}

int main()
{
	int n, m, k;
	cin >> n >> m >> k;

	// 用于存储刺头学生位置
	unordered_set<int> set;
	for (int i = 0; i < m; i++)
	{
		int num;
		cin >> num;
		set.insert(num);
	}

	// 用于存储学生的能力值
	vector<int> capacity(n);
	for (int i = 0; i < n; i++)
	{
		cin >> capacity[i];
	}

	int ans = 0;
	for (int i = 0; i < n; i++)
	{
		if (!set.count(i))
			ans += sum(capacity, i);
	}

	if (ans > k)
		cout << 1 << endl;
	else
		cout << 0 << endl;
	return 0;
}
🌷2. 购物:

题目描述:

code: 

// 购物
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<vector<int>> result;
vector<int> path;

void backTracking(vector<int>& price, int startindex, vector<bool>& used)
{
	result.push_back(path);
	for (int i = startindex; i < price.size(); i++)
	{
		// 如果要去重的话,则要加上下面的语句 和 used语句
		//if (i > 0 && price[i] == price[i - 1] && used[i-1] == false) continue;
		path.push_back(price[i]);
		//used[i] = true;
		backTracking(price, i + 1, used);
		path.pop_back();
		//used[i] = false;
	}
}

int main()
{
	// 分别读入:物品的个数 和 总价钱
	int n, k;
	cin >> n >> k;

	vector<bool> used(n, false);

	// 读入各个物品的价格
	vector<int> price(n);
	for (auto& e : price)
		cin >> e;

	// 将上面数组中所有的子集存放到result数组中
	backTracking(price, 0, used);

	// ans数组存放各子集的和
	vector<int> ans;
	for (const auto& s : result)
	{
		int sum = 0;
		for (const auto& e : s)
			sum += e;
		ans.push_back(sum);
	}

	sort(ans.begin(), ans.end());

	for (int i = 1; i <= k; i++)
		cout << ans[i] << endl;

	return 0;
}
🌷3. 划分字符串:

题目描述:

code: 

// 划分字符串
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int left_sum(const vector<int>& save, int k)
{
	int sum = 0;
	for (int i = 0; i < k; i++)
		sum += save[i];
	return sum;
}

int right_sum(const vector<int>& save, int j)
{
	int sum = 0;
	for (int i = j + 1; i < save.size(); i++)
		sum += save[i];
	return sum;
}

vector<int> find_value(const string& str)
{
	// 判断字符串的不合法性
	if (str.size() < 5 || str.size() > 30)
		return { 0, 0 };

	// 将字符串转换为数字存储在数组中
	vector<int> save;
	for (auto& e : str)
		save.push_back(static_cast<int>(e));

	// 求出数组中的所有元素的和
	int sum = 0;
	for (const auto& e : save)
		sum += e;

	for (int i = 1; i < save.size() - 1; i++)
	{
		int target = save.size() - 2;
		while (i < target)
		{
			int left = left_sum(save, i);
			int right = right_sum(save, target);
			int mid_sum = sum - left - right - save[i] - save[target];
			if (left == right && left == mid_sum)
				return { i, target };
			target--;
		}
	}
	return { 0,0 };
}

int main()
{
	// 用于存储输入的字符串
	string str;
	cin >> str;

	vector<int> index = find_value(str);
	cout << index[0] << ',' << index[1] << endl;

	return 0;
}
🌷4. MELON 的难题:

题目描述:

code: 

// MELON的难题
#include <iostream>
#include <vector>

using namespace std;

int half = 0;
int min_count = INT_MAX;

void solve_method(const vector<int>& save, int count, vector<int>& lst, int index)
{
	if (count == half)
	{
		if (index < min_count)
			min_count = index;
		if (save.size() - index < min_count)
			min_count = save.size() - index;
	}
	else
	{
		for (int i = index; i < save.size(); i++)
		{
			lst[index] = save[i];
			count += lst[index];
			if(count <= half && ( index < min_count || save.size() - index < min_count))
				solve_method(save, count, lst, index + 1);
			count -= lst[index];
		}
	}
}

int main()
{
	int n;
	cin >> n;

	// 将雨花石的重量存在数组中
	vector<int> save(n);
	for (auto& e : save)
		cin >> e;

	// 求出雨花石的重量总和
	int sum = 0;
	for (const auto& e : save)
		sum += e;

	// 判断雨花石的重量是否可以整除2
	if (sum % 2 != 0)
		cout << -1 << endl;
	else
	{
		half = sum / 2;
		vector<int> lst(n);
		solve_method(save, 0, lst, 0);
		cout << min_count << endl;
	}
	return 0;
}
🌷5. 荒岛求生:

题目描述:

code: 

// 荒岛求生
#include <iostream>
#include <vector>
#include <stack>
#include <string>
#include <sstream>

using namespace std;

vector<int> exchange(const string& str)
{
	stringstream ss(str);
	string s;
	vector<int> save;
	while (getline(ss, s, ' '))
		save.push_back(stoi(s));
	return save;
}

int main()
{
	string str;
	getline(cin, str);

	vector<int> save = exchange(str);

	stack<int> st;
	int i = 1;
	int count = 0;
	st.push(save[0]);
	while (i < save.size())
	{
		if ((save[i - 1] < 0 && save[i] < 0) || (save[i - 1] > 0 && save[i] > 0))
				st.push(save[i++]);
		else
		{
			int top = st.top();
			st.pop();
			int c = top + save[i];
			if (c != 0)
			{
				if (c > 0 && top > 0)
				{
					count++;
					st.push(c);
				}
				else
				{
					count--;
					save[i] = c;
				}
			}
			else
			{
				save.erase(save.begin() + i);
			}
		}

	}
	cout << count + st.size() << endl;
	return 0;
}
🌷6. 通过软盘拷贝文件:

题目描述:

code: 

// 通过软件拷贝文件
#include <iostream>
#include <vector>

using namespace std;

int bag = 1474560 / 512;

int main()
{
	int n;
	cin >> n;

	// 存储文件的容量
	vector<int> cap(n);
	for (auto& e : cap)
		cin >> e;

	// 存储文件所占的块数
	vector<int> wei(n);
	for (int i = 0; i < n; i++)
	{
		if (cap[i] % 512 == 0)
			wei[i] = cap[i] / 512;
		else
			wei[i] = cap[i] / 512 + 1;
	}

	// 动态规划数组记录背包容量下的最大价值
	vector<int> dp(bag + 1, 0);
	for (int i = 0; i < n; i++)
	{
		for (int j = bag; j >= wei[i]; j--)
			dp[j] = max(dp[j], dp[j - wei[i]] + cap[i]);
	}

	// 输出最大值
	cout << dp[bag] << endl;
	return 0;
}
🌷7. 数字序列比大小:

题目描述:

code: 

// 数字序列比大小
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	int n;
	cin >> n;

	vector<int> a(n);
	vector<int> b(n);
	for (auto& e : a)
		cin >> e;

	cin.ignore();

	for (auto& e : b)
		cin >> e;

	sort(a.begin(), a.end());
	sort(b.begin(), b.end());

	int ans = 0;
	for (int i = 0; i < n; i++)
	{
		int num = a[i];
		if (num < b[0])
		{
			ans--;
			b.pop_back();
		}
		else
		{
			if (num > b[0])
				ans++;
			b.erase(b.begin());
		}
	}
	cout << ans << endl;
	return 0;
}
🌷8. 树状结构查询:

题目描述:

code: 

// 树状结构查询
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

int main()
{
	// 总共有多少行数据
	int n;
	cin >> n;

	// 以树状形式存储数据
	map<char, vector<char>> tree;
	for (int i = 0; i < n; i++)
	{
		char a, b;
		cin >> a >> b;
		tree[b].push_back(a);
	}

	// 要求的父节点
	char parent;
	cin >> parent;

	vector<char> child = tree[parent];
	vector<char> ans;
	while (!child.empty())
	{
		char c = child[0];
		child.erase(child.begin());
		ans.push_back(c);
		if (tree.count(c))
		{
			for (const auto& e : tree[c])
				child.push_back(e);
		}
	}

	sort(ans.begin(), ans.end());

	for (const auto& e : ans)
		cout << e << endl;

	return 0;
}
🌷9. 评论转换输出:

题目描述:

code: 

// 评论转换输出
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <list>

using namespace std;

list<string> exchange(const string& str)
{
	stringstream ss(str);
	string s;
	list<string> lst;
	while (getline(ss, s, ','))
		lst.push_back(s);
	return lst;
}

void ensure_level_exists(vector<vector<string>>& tree, int level)
{
	if (tree.size() < level)
		tree.push_back(vector<string>());
}

void recursive(list <string>& lst, int childCount, vector<vector<string>>& tree, int level)
{
	for (int i = 0; i < childCount; i++)
	{
		string comment = lst.front();
		lst.pop_front();
		ensure_level_exists(tree, level);
		tree[level - 1].push_back(comment);
		int child = stoi(lst.front());
		lst.pop_front();
		if (child > 0)
			recursive(lst, child, tree, level + 1);
	}
}

void printTree(vector<vector<string>>& tree)
{
	cout << tree.size() << endl;
	for (const auto& e : tree)
	{
		for (const auto& c : e)
		{
			cout << c << " ";
		}
		cout << endl;
	}
}

int main()
{
	// 用于存储输入的字符串
	string str;
	cin >> str;

	// 将字符串转换为数组进行存储
	list<string> lst = exchange(str);

	// 将数据以数的形式进行存储
	vector<vector<string>> tree;
	
	int level = 1;
	while (!lst.empty())
	{
		string comment = lst.front();
		lst.pop_front();
		ensure_level_exists(tree, level);
		tree[level - 1].push_back(comment);
		int child = stoi(lst.front());
		lst.pop_front();
		recursive(lst, child, tree, level + 1);
	}

	printTree(tree);

	return 0;
}
🌷10. 找出两个整数数组中同时出现的整数:

题目描述:

code: 

// 找出两个整数数组中同时出现的整数
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <unordered_map>
#include <map>
#include <algorithm>

using namespace std;

vector<int> exchange(const string& str)
{
	stringstream ss(str);
	string s;
	vector<int> save;
	while (getline(ss, s, ','))
		save.push_back(stoi(s));
	return save;
}

int main()
{
	string str1, str2;
	cin >> str1 >> str2;

	vector<int> a = exchange(str1);
	vector<int> b = exchange(str2);

	unordered_map<int, int> map1;
	unordered_map<int, int> map2;
	for (const auto& e : a)
		map1[e]++;

	for (const auto& e : b)
		map2[e]++;

	map<int, vector<int>> map;
	for (const auto& e : map1)
	{
		int num = e.first;
		int count = e.second;
		if (map2.count(num))
		{
			int n = min(count, map2[num]);
			map[n].push_back(num);
		}
	}

	if (map.empty())
		cout << "NULL" << endl;
	else
	{
		for (const auto& e : map)
		{
			int num = e.first;
			vector<int> cap = e.second;
			sort(cap.begin(), cap.end());
			cout << num << ":";
			for (int i = 0; i < cap.size(); i++)
			{
				if (i != cap.size() - 1)
					cout << cap[i] << ',';
				else
					cout << cap[i] << endl;
			}
		}
	}

	return 0;
}

坚持打卡!😃

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1195385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot乐器视频学习网站设计与实现(源码齐全可用)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Linux常用命令——bzmore命令

在线Linux命令查询工具 bzmore 查看bzip2压缩过的文本文件的内容 补充说明 bzmore命令用于查看bzip2压缩过的文本文件的内容&#xff0c;当下一屏显示不下时可以实现分屏显示。 语法 bzmore(参数)参数 文件&#xff1a;指定要分屏显示的.bz2压缩包。 在线Linux命令查询…

使用JavaScript编写游戏平台数据爬虫程序

目录 一、引言 二、准备工作 三、爬取数据 四、数据处理与存储 五、数据分析与利用 六、结论与展望 一、引言 随着网络技术的发展&#xff0c;数据已经成为企业、研究机构和个人的重要资源。数据可以帮助我们了解市场趋势、用户需求&#xff0c;甚至可以用于机器学习和人…

代码随想录图论部分-695. 岛屿的最大面积|1020. 飞地的数量

695. 岛屿的最大面积 题目&#xff1a;给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff0…

什么是安全平行切面

安全平行切面的定义 通过嵌入在端—管—云内部的各层次切点&#xff0c;使得安全管控与业务逻辑解耦&#xff0c;并通过标准化的接口为安全业务提供内视和干预能力的安全基础设施。安全平行切面是一种创新的安全体系思想&#xff0c;是实现“原生安全”的一条可行路径。 为什…

Milvus Cloud——LLM Agent 现阶段出现的问题

LLM Agent 现阶段出现的问题 由于一些 LLM&#xff08;GPT-4&#xff09;带来了惊人的自然语言理解和生成能力&#xff0c;并且能处理非常复杂的任务&#xff0c;一度让 LLM Agent 成为满足人们对科幻电影所有憧憬的最终答案。但是在实际使用过程中&#xff0c;大家逐渐发现了通…

Postman模拟上传文件

如图&#xff0c;在F12抓到的上传文件的请求 那要在postman上模拟这种上传&#xff0c;怎么操作呢&#xff0c;如图&#xff0c;选中【Select File】选取文件上传即可

【CASS精品教程】cass3d加载点云(.ilas)并处理应用

本文讲解cass11.0 3d中将ilas点云转为las加载并进行后续处理。(cass11.0下载与安装) 一、ilas点云格式介绍 点云ilas格式是现今数字化三维模型建模的--种普遍被使用的数据格式,也被称作点云、点集或聚集点。它把地球表面上的物体,比如森林、海洋、河流、山脉等自然物体,以…

【码银送书第十期】《强化学习:原理与Python实战》

目录 1.什么是人工智能对齐 2.为什么要研究人工智能对齐 3.人工智能对齐的常见方法 1.什么是人工智能对齐 人工智能对齐&#xff08;AI Alignment&#xff09;指让人工智能的行为符合人的意图和价值观。 人工智能系统可能会出现“不对齐”&#xff08;misalign&#xff09;的…

Python喜羊羊

目录 系列文章 写在前面 绘图基础 画喜羊羊 写在后面 系列文章 序号文章目录直达链接表白系列1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want5…

elemetui 解决同个页面,同时使用多个el-table表格组件导致的数据错乱

1、背景 在一个页面中&#xff0c;使用了饿了么框架的3个el-table表格&#xff0c;3个表格平级&#xff0c;只不过是根据条件判断渲染哪个表格。本来以为使用v-if就可以隔离&#xff0c;没想到还是出现了问题&#xff0c;因为3个表格中有几列绑定的字段一模一样&#xff0c;导…

STM32基础--NVIC中断控制器

一、NVIC是什么&#xff1f; NVIC是一种中断控制器。当一个中断正在处理时&#xff0c;另一个更高优先级的中断可以打断当前中断的执行&#xff0c;并立即得到处理。这种机制使得处理器在高速运行的同时&#xff0c;能够及时响应不同优先级的中断请求。 二、有哪些优先级&…

如何在 Idea 中修改文件的字符集(如:UTF-8)

以 IntelliJ IDEA 2023.2 (Ultimate Edition) 为例&#xff0c;如下&#xff1a; 点击左上角【IntelliJ IDEA】->【Settings…】&#xff0c;如下图&#xff1a; 从弹出页面的左侧导航中找到【Editor】->【File Encodings】&#xff0c;并将 Global Encoding、Project E…

Excel函数 - 多条件查找查询公式

如下图所示&#xff0c;要求在H2单元格&#xff0c;根据A列序号和B列姓名&#xff0c;从表中查找对应的成绩。 1、Vlookup公式&#xff08;数组公式&#xff09; VLOOKUP(F2&G2,CHOOSE({1,2},A2:A7&B2:B7,C2:C7),2,0) 注&#xff1a;Excel最新版不需要按Ctrlshiftente…

vscode调试react 最初的源码

如果直接在react项目中打点调试, 调试的是 react-dom.development.js, 而源码里这些逻辑是分散在不同的包里的,如何才能够调试 React 最初的源码呢&#xff1f; JS 代码经过编译&#xff0c;会产生目标代码&#xff0c;但同时也会产生 sourcemap。sourcemap 的作用就是映射目…

通用文件在线预览软件kkFileView

什么是 kkFileView &#xff1f; kkFileView 为文件文档在线预览解决方案&#xff0c;基本支持主流办公文档的在线预览&#xff0c;如 doc&#xff0c;docx&#xff0c;xls&#xff0c;xlsx&#xff0c;ppt&#xff0c;pptx&#xff0c;pdf&#xff0c;txt&#xff0c;zip&…

系统分区、MSR -重装系统中的一点小知识

一、前言&#xff1a; 在使用优启通装载的U盘重装系统时&#xff0c;出现了一点问题&#xff0c;问题和解决方法以及涉及知识贴在下面。 以前大都是使用微软官方的镜像系统直接写入U盘&#xff0c;将其做成系统盘&#xff08;媒体创建工具Media Creation Tool&#xff09;&am…

Qt 自定义全局悬浮置顶按钮

Qt 自定义全局悬浮置顶按钮 效果 使用示例 ResetButton* resetBtn; resetBtn new ResetButton(); resetBtn->show(); resetBtn->move(QPoint(1000, 800)); connect(resetBtn, &ResetButton::clicked, this, &MainWindow::Reset);自行加入图片&#xff0c;透明…

第二证券:杯柄形态最佳买入点?

杯柄形状是遭到股票剖析师广泛应用的一个技能政策。它经过图表剖析来确定买入或卖出的机遇&#xff0c;被认为是股票剖析中非常重要的判别方法之一。关于杯柄形状&#xff0c;股票剖析师们最感喜好的当然是杯柄的买入点。那么&#xff0c;杯柄形状最佳的买入点是什么&#xff1…

阻容降压电阻应用

公式&#xff1a;Xc1/2πfC 电流&#xff1a;IU/Xc 举例&#xff1a;1uf金属化聚丙烯膜电容的容抗是3184欧姆。电流是70ma。 实际应用中根据工作电流去倒推算电容。