首页 > 编程语言 >【华为OD】D卷真题100分: 生日礼物 C++代码实现

【华为OD】D卷真题100分: 生日礼物 C++代码实现

时间:2024-06-16 18:29:17浏览次数:26  
标签:gift 真题 OD +---+ C++ cake left

【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript

【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript-CSDN博客

C、java、python、JS、C++代码实现:

【华为OD】D卷真题100分: 生日礼物 C语言代码实现-CSDN博客

【华为OD】D卷真题100分: 生日礼物 Java代码实现-CSDN博客 

【华为OD】D卷真题100分: 生日礼物 python代码实现-CSDN博客 

【华为OD】D卷真题100分: 生日礼物 JavaScript代码实现-CSDN博客 

【华为OD】D卷真题100分: 生日礼物 C++代码实现-CSDN博客 

题目描述:

小牛的孩子生日快要到了,他打算给孩子买蛋糕和小礼物,蛋糕和小礼物各买一个,他的预算不超过x元。蛋糕cake和小礼物gift都有多种价位的可供选择。

请返回小牛共有多少种购买方案。

输入描述

第一行表示cake的单价,以逗号分隔

第一行表示gift的单价,以逗号分隔

第三行表示x预算

输出描述

输出数字表示购买方案的总数

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

10,20,5
5,5,2
15

输出

6

说明

解释:小牛有6种购买方案,所选蛋糕与所选礼物在数组中对应的下标分别是:

第1种方案:cake [0] + gift [0] = 10 + 5 = 15;

第2种方案:cake [0] + gift [1] = 10 + 5 = 15;

第3种方案:cake [0] + gift [2] = 10 + 2 = 12;

第4种方案:cake [2] + gift [0] = 5 + 5 = 10;

第5种方案:cake [2] + gift [1] = 5 + 5 = 10;

第6种方案:cake [2] + gift [2] = 5 + 2 = 7。

备注

1 <= cake.length <= 10^5
1 <= gift.length <= 10^5
1 <= cake[i],gift[i] <= 10^5
1 <= x <= 2*10^5

     wumu1024                                                         
                                                            
              +---+                                                          
  3            |   |       ++                               +       +---|   
  |           |   | 3      +                6               +  |   +   |        +
  |      +     |   |       +         +                      +    |  +   |       +
  |      +    |   +---+    +        +        +++++          +   +  +   |        +
  |      +    | +      |   +   +----+        |   |          +   +  +   |        +
  |      +  3 | +      |   +   +    +      2 |   |     2    +   +  +   |        +
  |      +    | +      |   +   +    +        |   |          +   +  +   |        +
  |      +---+ +     |    |  |    +    ----+   |   +---+    |  |  +   |         +
  |      |     +     |    |  |    +    |       |   |   |    |  |  +   |         +
  |    1 |     +     | 8  |  |    +  1 |   |    | 1 |   | 1 |   |  +   |        +
  |      |     +     |    |  |    +    |   |    |   |   |   |   |  +   |        +
  |  +---+     +     +---+   |    ++---+    ++   +---+   +---+   |  +   |        +
  |  |         +         |   |    |         ++              |   |  |+   |        +
  |0 |         +         | 0 |  0 |         ++              | 0 |  |+   |        +
  |  |         +         |   |    |         ++              |   |  |+   |        +
  +---+         +          +-------+                       +---+| +|+   |        +
                +                                                    +   |        +
    0   1   2   3   4   5   6   7   8   9  10  11  12 + v:    w  u m    u 1 0 2 4
 

题目解析:

        按输入的2个数组,分别组合一下,只要2个和小于等于目标值,即可得到一种可能,然后累计结果即可

代码实现:

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

void split(string &str, vector<int> &vec) {
	int left = 0;
	int pos = 0;
	while ((pos = str.find(",", left)) != string::npos) {
		string tmp = str.substr(left, pos - left);
		if (!tmp.empty()) {
			vec.push_back(stoi(str.substr(left, pos - left)));
		}
		left = pos + 1;
	}
	if (left < str.size()) {
		vec.push_back(stoi(str.substr(left)));
	}
}
int main()
{
	string cake, gift, x;
	getline(cin, cake);
	getline(cin, gift);
	getline(cin, x);
	replace_if(cake.begin(), cake.end(), [&](char c) {return !isdigit(c); }, ',');
	replace_if(gift.begin(), gift.end(), [&](char c) {return !isdigit(c); }, ',');
	vector<int> cakePrice, giftPrice;
	split(cake, cakePrice);
	split(gift, giftPrice);
	int xVal = stoi(x);
	int cnt = 0;
	for (int i = 0; i < cakePrice.size(); ++i) {
		for (int j = 0; j < giftPrice.size(); ++j) {
			if (cakePrice[i] + giftPrice[j] <= xVal)++cnt;
		}
	}
	cout << cnt << endl;

	return 0;
}

标签:gift,真题,OD,+---+,C++,cake,left
From: https://blog.csdn.net/mars1199/article/details/139722565

相关文章

  • 【学习-华为HCIA数通网络工程师真题(持续更新)】(2024-6-16更)
    1、在VRP平台上,可以通过下面哪种方式访向上条历史命令?上光标(ctrl+U为自定义快捷键,ctrl+P为显示历史缓存区的前一条命令,左光标为移动光标)2、主机A(10.1.1.2/24)和主机B(11.1.1.2/24)使用哪种网络设备可以实现通信?路由器(两个主机属于不同的网段,需要通过网关查找路由......
  • 【C++学习笔记 4】C++中的类
    面向对象的程序设计试想一下,假如我要写一个游戏,玩家在其中移动#include<iostream>#defineLOG(x)std::cout<<x<<std::endlvoidmove(intx,inty,intspeed);intmain(){ intPlayerX0,PlayerY0; intspeed=2; intPlayerX1,PlayerY1; intspeed......
  • 最实用的 LeetCode 刷题指南
    暑期实习基本结束了,校招即将开启。当前就业环境已不再是那个双向奔赴时代了。求职者在变多,岗位在变少,要求还更高了,最近社群又开始活跃起来了,各种讨论、各种卷。为方便大家快手入手、节省时间,我整理了一份算法指南:汇总合集:内容不仅仅是大模型,也包括LeetCode刷题技巧《......
  • c++学习笔记(二)
    c++中的引用引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。C++引用vs指针引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用......
  • orm中使用modelForm添加数据
    ModelForm可以简化表格数据输入的流程,还能对输入的数据进行校验。1.在views.py中创建ModelForm的类fromdjangoimportformsclassUserModelForm(forms.ModelForm):name=forms.CharField(min_length=3,label='用户名')这是校验条件,相当于限制了后续输入新的数据时,其中的......
  • UE4 C++ AI感官获取检测结果
    重写ActorsPerceptionUpdated函数有委托OnPerceptionUpdated,可以自己编写函数然后进行绑定。也可以直接对ActorsPerceptionUpdated进行重写,该函数会在有感官变化时进行调用其会根据委托获得一个数组,即AI感知到的所有发生变化的Actor。通过对这些Actor的判断即可判断是进入范围还......
  • Modbus转Profibus网关接变频器:实现工业自动化无缝连接
    一、背景在工业自动化领域,Modbus和Profibus是两种常见的通讯协议,而变频器作为控制电机转速的重要设备。为了实现不同设备之间的无缝连接和数据传输,现场大多数采用Modbus转Profibus网关(XD-MDPB100)来解决Modbus设备和Profibus设备通讯问题。本文将介绍Modbus转Profibus网关(XD-MDPB1......
  • 名称空间,亲和性,pod生命周期,健康检查
    一、名称空间1、切换名称空间[root@masterpod]#kubectlcreatenstestnamespace/testcreated[root@masterpod]#kubectlgetnsNAMESTATUSAGEdefaultActive10hkube-node-leaseActive10hkube-publicActive10hkube-sy......
  • [C++] vector && list 等容器的迭代器失效问题
    标题:[C++]容器的迭代器失效问题@水墨不写bug正文开始:什么是迭代器?    迭代器是STL提供的六大组件之一,它允许我们访问容器(如vector、list、set等)中的元素,同时提供一个遍历容器的方法。然而,在使用迭代器时,我们必须注意所谓的“迭代器失效”问题。一、插入/删......
  • 【C++课程设计】通讯录管理系统
    完整代码:开源地址一、任务书 手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(假设每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。存储在手机中的联系人的信息只包含姓名和电话号码两项信息。存储......