milk3-section1.4

题目大意

    农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的。有时,农民把牛奶从一个桶倒到 另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的。由于节约, 牛奶不会有丢失
    写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。

输入格式

一行:三个整数A,B和C。

输出格式

一行:升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性

样例输入

8 9 10

样例输出

1 2 8 9 10 

题解

递归找出所有可能的牛奶分布情况,递归终点为该种情况已经被记录下来过了,递归的每一步即为牛奶的相互倾倒的动作,一共六种可能。然后将所有A中为空的升序输出C中牛奶量。

代码

#include
int dao(int i,int j,int x)
{
if(in[j+1][2])
    {
        temp=n[j][2];
        n[j][2]=n[j+1][2];
        n[j+1][2]=temp;
        temp=n[j][1];
        n[j][1]=n[j+1][1];
        n[j+1][1]=temp;
        temp=n[j][0];
        n[j][0]=n[j+1][0];
        n[j+1][0]=temp;

    }
    j=0;
for(i=0;i<8000;i++)
{
    if(n[i][0]==0&&(n[i][0]+n[i][1]+n[i][2])!=0)
    {
        h[j]=n[i][2];
        j++;
    }
}
for(i=0;i

你可能感兴趣的:(USACO)