c++题目如下:题目描述: 妈妈派小明去买米,小明来到米店,发现有各种各样的米,商家为了方便顾客,把每种米都用1斤装的袋子装好了,已知n种米的所剩数量(斤)和单价(元/斤),小明共带了s元钱,问他一共最多能买多少米? 输入格式: 第一行两个整数n和s,表示米的种数和小明所带s元钱 接下来n行,每行两个整数,分别表示每种米所剩的可买数量和单价 输出格式: 一个数,表示小明最多能买多少斤米 样例输入: 2 10 3 4 3 2 样例输出: 4 约定: 所有数据均小于1000000 请问该题的c++代码是什么
时间: 2024-02-03 17:14:07 浏览: 206
一个关于c++程序的小例题
以下是该题的C++代码实现:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
struct Rice {
int amount; // 可买数量
int price; // 单价
};
bool cmp(Rice a, Rice b) { // 按单价从小到大排序
return a.price < b.price;
}
int main() {
int n, s;
cin >> n >> s;
Rice* rices = new Rice[n];
for (int i = 0; i < n; i++) {
cin >> rices[i].amount >> rices[i].price;
}
sort(rices, rices + n, cmp); // 排序
int sum = 0; // 已买数量
for (int i = 0; i < n; i++) {
if (s >= rices[i].price * rices[i].amount) { // 可以全部买完
s -= rices[i].price * rices[i].amount;
sum += rices[i].amount;
} else { // 只能买部分
sum += s / rices[i].price;
break;
}
}
cout << sum << endl;
delete[] rices;
return 0;
}
```
算法思路:
首先将所有米按单价从小到大排序,然后从单价最小的米开始购买,如果当前米的数量可以全部购买,则全部购买;否则只能购买部分。最终输出已购买的总数量。
阅读全文