编程题:7209 水罐
在电影《虎胆龙威3》中,Bruce Willis 和Samuel L.Jackson曾面对下面这个问题。有两个水罐,一个容积三加仑,一个容积五加仑,怎样在不借助其他工具和外在因素的情况下,使五加仑容积的罐里装上四加仑水,这就是那个问题。
现在,你拥有两个罐子,分别是A和B,还有无限量的水供你使用。你可以采取3种行动方式:
(1)你可以让一个罐子装满水
(2)你可以让一个装水的罐子变空
(3)你可以将水从一个罐子里注入另一个罐子。将水从一个罐子注入到另一个罐子时,当第一个罐子已经空了或者第二个罐子已经满了的时候,注入行动就必须停止,例如,如果A的容积为5加仑且装有5加仑的水而B的容积为8加仑但只装了6加仑的水,此时若将A罐子的水注入到B罐,当B罐子装满水的时候行动停止,此时A罐子中还余下3加仑的水。
这个问题由一个三元组给出(Ca,Cb,N),其中,Ca和Cb分别代表罐A和罐B的容积,N最终想要得到的水的体积。采用连续的步骤使得恰好有N加仑的水存在于罐B中,其中一个可能的步骤如下:
fill A
fill B
empty A
empty B
pour A B
pour B A
success
其中pour A B表示“将罐A中的水倒进罐B中”,success表示目标已经达到。
假定所有给定的输入都有相应的解决方案。
### 输入格式:
输入包括多组测试数据。每组数据占一行,包括3个整数:Ca, Cb, and N。其中Ca和Cb表示罐A和罐B的容量,N是最终想要的容量,并且满足0 < Ca <= Cb, N <= Cb <=1000。
### 输出格式:
输出一系列的灌水步骤,最终获得N加仑的水。每组测试数据最后输出“success”。没有多余的空行,末尾也没有任何空格。
### 输入样例:
in
3 5 4
5 7 3
### 输出样例:
out
fill A
pour A B
fill A
pour A B
empty B
pour A B
fill A
pour A B
success
fill A
pour A B
fill A
pour A B
empty B
pour A B
success
答案:若无答案欢迎评论
现在,你拥有两个罐子,分别是A和B,还有无限量的水供你使用。你可以采取3种行动方式:
(1)你可以让一个罐子装满水
(2)你可以让一个装水的罐子变空
(3)你可以将水从一个罐子里注入另一个罐子。将水从一个罐子注入到另一个罐子时,当第一个罐子已经空了或者第二个罐子已经满了的时候,注入行动就必须停止,例如,如果A的容积为5加仑且装有5加仑的水而B的容积为8加仑但只装了6加仑的水,此时若将A罐子的水注入到B罐,当B罐子装满水的时候行动停止,此时A罐子中还余下3加仑的水。
这个问题由一个三元组给出(Ca,Cb,N),其中,Ca和Cb分别代表罐A和罐B的容积,N最终想要得到的水的体积。采用连续的步骤使得恰好有N加仑的水存在于罐B中,其中一个可能的步骤如下:
fill A
fill B
empty A
empty B
pour A B
pour B A
success
其中pour A B表示“将罐A中的水倒进罐B中”,success表示目标已经达到。
假定所有给定的输入都有相应的解决方案。
### 输入格式:
输入包括多组测试数据。每组数据占一行,包括3个整数:Ca, Cb, and N。其中Ca和Cb表示罐A和罐B的容量,N是最终想要的容量,并且满足0 < Ca <= Cb, N <= Cb <=1000。
### 输出格式:
输出一系列的灌水步骤,最终获得N加仑的水。每组测试数据最后输出“success”。没有多余的空行,末尾也没有任何空格。
### 输入样例:
in
3 5 4
5 7 3
### 输出样例:
out
fill A
pour A B
fill A
pour A B
empty B
pour A B
fill A
pour A B
success
fill A
pour A B
fill A
pour A B
empty B
pour A B
success
答案:若无答案欢迎评论