刘大师为了讲解遍历算法,专门买了三个容量分别为A,B,C的水瓶。开始时A,B水瓶为空,而C装满水。可以把水从一个水瓶倒入另一个水瓶,但每次必须把倒出的水瓶倒空或者把倒入的水瓶装满(不能溢出)。求当水瓶A为空的时候,留在C水瓶中所有可能的水量。 输入格式: 单独的一行包括三个整数 A,B 和 C (1≤A,B,C≤40)。 输出格式: 只有一行,列出当A 是空的时候,水瓶C中装有的所有水量,按水量升序排列输出。数字间用空格分开,同时第一个数字前面和最后一个数字后面不能留空格。 输入样例: 8 9 10 输出样例: 1 2 8 9 10 使用C++
时间: 2024-04-09 17:33:34 浏览: 70
以下是使用C++编写的解决方案:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int A, B, C;
void dfs(int a, int b, int c, vector<int>& result) {
if (a == 0) {
result.push_back(c);
return;
}
// 将水从 A 瓶倒入 B 瓶
if (a > 0 && b < B) {
int amount = min(a, B - b);
dfs(a - amount, b + amount, c, result);
}
// 将水从 A 瓶倒入 C 瓶
if (a > 0 && c < C) {
int amount = min(a, C - c);
dfs(a - amount, b, c + amount, result);
}
}
int main() {
cin >> A >> B >> C;
vector<int> result;
dfs(A, 0, C, result);
sort(result.begin(), result.end());
for (int i = 0; i < result.size(); i++) {
cout << result[i];
if (i != result.size() - 1) {
cout << " ";
}
}
cout << endl;
return 0;
}
```
输入样例:
```
8 9 10
```
输出样例:
```
1 2 8 9 10
```
阅读全文