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

目录

🌷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.mfbz.cn/a/131059.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

呼叫中心系统如果对接大模型

电话机器人对接大模型的例子 介绍 自chatgpt3.5发布以来&#xff0c;各种大模型飞速发展&#xff0c;各行各业都有接入大模型的需求&#xff0c;呼叫中心行业非常适合通过接入大模型用AI来回答用户的各种咨询&#xff0c;降低人力资源&#xff0c;使用顶顶通呼叫中心中间件&a…

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

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

【狂神说Java】linux详解

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a;狂神说Java &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0c;永远…

Java 之 IO/NIO/OKIO

BIO blocking io AIO Asynchronous IO 从内存读取到写入--输出 从外部到内存 -- 输入 OutputStream //文件不存在则自动创建 try {OutputStream outputStream new FileOutputStream("text.txt");outputStream.write(a);outputStream.write(b);} catch (IOExcep…

小程序开发——小程序页面的配置与生命周期

目录 1.小程序的页面配置 2.页面的生命周期 3.页面跳转 4.页面间的参数传递 5.新闻客户端案例讲解 6.小结 1.小程序的页面配置 页面的配置设置app.json中的window配置项的内容&#xff08;页面中配置项会覆盖app.json的window中相同的配置项&#xff09;&#xff0c;其属…

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

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

计算机网络(一)

一、什么是计算机网络、计算机协议&#xff1f; 计算机网络就是由计算机作为收发端&#xff0c;不同计算机相互连接的网络&#xff0c;包括互联网&#xff08;Internet&#xff09;&#xff0c;公司或者家用网络&#xff08;intranet&#xff09;等等&#xff1b;其中Internet…

MobaXterm 安装+使用

目录 1 下载安装 1.1 官网下载(速度慢) 1.2 WebRA下载(不是最新版) 2 常用功能 2.1 基础设置 2.2 常用功能 1 下载安装 1.1 官网下载(速度慢) 点击MobaXterm官网,按下图↓↓步骤下载 1.2 WebRA下载(不是最新版) 点击WebRA网址,按下图↓↓步骤下载 2 常用功能 2.1 基础设…

【仿真动画】人机协作机器人自动化产线仿真动画欣赏

人机协作机器人自动化产线仿真动画 动画部分思维导图 机器人自动化产线仿真动画是利用三维动画技术对机器人自动化产线进行仿真模拟&#xff0c;以直观、形象的方式展示产线的运行情况。它具有以下作用&#xff1a; 提高沟通效率 机器人自动化产线的设计、实施和维护涉及多个部…

Java面试题

一、项目面试题-消息队列 背景&#xff1a;在分布式系统中是如何处理高并发的。 由于在高并发的环境下&#xff0c;来不及同步处理用户发送的请求&#xff0c;则会导致请求发生阻塞。比如说&#xff0c;大量的insert&#xff0c;update之类的请求同时到达数据库MYSQL&#xff…

C#源代码生成器深入讲解一

C#源代码生成器 01 源代码生成器初体验 新建一个类库&#xff0c;一定是standard2.0版本&#xff0c;否则会出问题。引用Nuget包Microsoft.CodeAnalysis.Common新建一个类&#xff0c;继承自ISourceGenerator接口 //一定要写&#xff0c;制定语言 [Generator(LanguageNames.…

python3GUI--PyQt5打包心得(二)nuitka、inno Setup(详细图文演示、附所有软件)

文章目录 一&#xff0e;前言二&#xff0e;准备1.nuitka1.1介绍1.3项目地址1.3安装 2.mingw641.1介绍1.2下载安装 3.Inno Setup1.1介绍1.2安装 三&#xff0e;nuitka打包1.打包2.装mingw643.装ccahe4.打包完成 四&#xff0e;测试效果五&#xff0e;inno Setup制作安装软件1.配…

微信小程序前端开发

目录 前言&#xff1a; 1. 框架选择和项目搭建 2. 小程序页面开发 3. 数据通信和接口调用 4. 性能优化和调试技巧 5. 小程序发布和上线 前言&#xff1a; 当谈到微信小程序前端开发时&#xff0c;我们指的是使用微信小程序框架进行开发的一种方式。在本文中&#xff0c;我…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三)

员工分页查询和账号启用禁用功能 1. 员工分页查询1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码开发1.2.1 设计DTO类1.2.2 封装PageResult1.2.3 Controller层1.2.4 Service层接口1.2.5 Service层实现类1.2.6 Mapper层 1.3 功能测试1.4 代码完善 2. 启用禁用员工账号…

FPGA与STM32_FSMC总线通信实验

FPGA与STM32_FSMC总线通信实验 内部存储器IP核的参数设置创建IP核FPGA代码STM32标准库的程序 STM32F407 上自带 FSMC 控制器&#xff0c;通过 FSMC 总线的地址复用模式实现STM32 与 FPGA 之间的通信&#xff0c;FPGA 内部建立 RAM 块&#xff0c;FPGA 桥接 STM32 和 RAM 块&…

Python喜羊羊

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

Linux常用命令——bzmore命令

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

AD9371 Crossbar 和 I、Q数据 映射JESD204B传输层

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

Win10文件资源管理器卡顿不流畅的解决方法

在Win10电脑中&#xff0c;用户点击打开文件资源管理器&#xff0c;发现文件资源管理器变得卡顿不流畅了&#xff0c;非常影响用户的操作效率。接下来小编给大家带来了最简单的解决方法&#xff0c;解决后用户再去操作Win10系统的文件资源管理器&#xff0c;就会发现变得顺畅不…

主成分分析法(PCA)的理解(附python代码案例)

目录 一、PCA简介二、举个例子三、计算过程&#xff08;公式&#xff09;3.0 题干假设3.1 标准化3.2 计算协方差矩阵3.3 计算特征值和特征值向量3.3 多重共线性检验&#xff08;可跳过&#xff09;3.4 适合性检验&#xff08;可跳过&#xff09;3.5 计算主成分贡献率及累计贡献…
最新文章