有两个容量分别为M斤和N斤的空酒瓶和一个装满酒的大酒缸。可以从酒缸中取酒把酒瓶装满,也可以把酒瓶中的酒全部倒回酒缸,还可以把一个酒瓶中的酒倒入另一个酒瓶中(要么倒干,要么倒满)。设计一个变治算法判断能否在容量为N的酒瓶中恰好得到N/2斤酒。输入 输入包括多组数据。每组数据一行两个数,分别表示两个酒瓶的容量M和N(0 <= M, N <= 100)。M = N = 0意味着输入结束。输出 对每组测试数据,如果能在容量为N的酒瓶中恰好得到N/2斤酒,输出Y;否则,输出N。样例输入 复制 3 4 2 7 5 8 0 0 样例输出 复制 Y N Y
时间: 2024-04-08 15:34:29 浏览: 73
抱歉,我之前给出的解决方案是使用Python编写的。如果你希望用C++实现,可以参考下面的代码:
```cpp
#include <iostream>
using namespace std;
bool can_get_half(int m, int n, int target_n) {
if (n == target_n) {
return true;
}
if (n < target_n || m == 0) {
return false;
}
return can_get_half(m, n - m, target_n) || can_get_half(m - 1, n, target_n);
}
int main() {
int m, n;
while (true) {
cin >> m >> n;
if (m == 0 && n == 0) {
break;
}
if (can_get_half(m, n, n / 2)) {
cout << "Y" << endl;
} else {
cout << "N" << endl;
}
}
return 0;
}
```
你可以将上面的代码保存为一个.cpp文件,然后使用C++编译器进行编译和运行。输入数据按照要求输入,程序会输出结果。
希望这次能满足你的需求!如果还有其他问题,请随时提问。
阅读全文