第四篇解题报告,这道题十分十分十分的坑
题目大意大概是说你有两个壶,分别告诉你壶的容量是多大,默认A壶要比B壶小然后给你一个目标值,你要用两个壶量出最终的目标值,你能够进行的操作一共有以下几种
fill A
fill B
empty A
empty B
pour A B
pour B A
successfill A 把A装满
fill B 把B装满
empty A 清空A
empty B 清空B
pour A B 把A里面的水倒向B
pour B A 把B里面的水倒向A
success 成功
问通过上述几种操作(可重复)要如何让壶里面的水量出目标值
然后题目给了一组样例输入输出。
- Sample Input
3 5 4
5 7 3
Sample Output
fill B
pour B A
empty A
pour B A
fill B
pour B A
success
fill A
pour A B
fill A
pour A B
empty B
pour A B
success
- 然后就贼坑,一开始用搜索做,做了很多剪枝操作,就是得不出目标输出,后来仔细读了一下题,发现样例输出只是称出目标值的一种方案,也就是说你只要能成功的让壶里面的水正好等于目标值就OK的也就是说不用非得等于样例答案,然后嘞~就皆大欢喜。so短的代码就可以成功的得出答案。。。
要是这样算的话其实算水题一道。
上代码
#include<iostream>
using namespace std;
int main()
{
int ha,hb,result;
while(cin>>ha>>hb>>result)
{
int water=0;
while(water!=result)
{
water =water + ha;
cout<<"fill A"<<endl<<"pour A B"<<endl;
if(water>hb)
{
water = water-hb;
cout<<"empty B"<<endl<<"pour A B"<<endl;
}
}
cout<<"success"<<endl;
}
}
结束