妈妈给了明明n元,让明明去水果店买水果,水果店目前有两种水果,一种是猕猴桃,共有200kg,单价为12元/kg;另一种是西瓜,共有50kg,单价为8元/kg。此外,该水果店规定顾客购买的每种水果的重量只能是1的整数倍且每种水果至少买1kg。请问明明如果刚好把钱用完,可以买几千克猕猴桃,几千克西瓜?,若有多种购买方案,则需求出所有可能的购买方案。若无法购买,则输出“No”。 数据范围:0<=n<3000 输入 一行一个正整数,表示妈妈给明明的钱。 输出 若能购买,则输出有若干行,每行两个整数,表示购买的猕猴桃和西瓜的重量,每行的两个整数之间用空格分隔。 若不能购买,则输出“No”。C++
时间: 2023-11-15 15:05:03 浏览: 123
C#基于数字图像处理开发的猕猴桃水果表面缺陷检测程序源码+sln解决方案.zip
以下是一份 C++ 代码实现:
```c++
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
bool foundSolution = false;
for (int x = 1; x <= 200 && x * 12 <= n; x++) {
for (int y = 1; y <= 50 && x * 12 + y * 8 <= n; y++) {
if (x + y > 0 && (x + y) % 2 == 0 && x * 12 + y * 8 == n) {
foundSolution = true;
cout << x << " " << y << endl;
}
}
}
if (!foundSolution) {
cout << "No" << endl;
}
return 0;
}
```
首先读入一个正整数 `n`,表示妈妈给明明的钱。
然后,使用两重循环枚举猕猴桃和西瓜的重量,分别为 `x` 和 `y`。由于题目要求购买的每种水果的重量只能是 1 的整数倍,因此 `x` 和 `y` 的范围是 1 到 200 和 1 到 50,分别对应两种水果的库存量。
对于每个 `(x, y)`,判断是否满足以下条件:
1. 购买的猕猴桃和西瓜的重量之和为偶数,因为只有这样才能将妈妈给的钱刚好用完。
2. 购买的猕猴桃和西瓜的总价等于妈妈给的钱。
如果满足这两个条件,说明找到了一种购买方案,输出猕猴桃和西瓜的重量,并将 `foundSolution` 标记为 `true`。
如果没有找到任何一种购买方案,输出 No。
注意,为了避免出现除以 0 的情况,判断条件中应该加上 `x + y > 0`。
此外,还有一种优化方法:由于购买的猕猴桃和西瓜的重量之和为偶数,因此可以对 `y` 进行奇偶性判断,只枚举偶数即可,这样可以减少一半的枚举次数。
阅读全文