【华为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