ZJU_1005

这是一道模拟题

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int ca,cb,n;
    while(cin>>ca>>cb>>n)//ca,cb,n分别表示a水壶的容量,b的容量和要求的量n
    {
        int bnow;//b水壶现在的容量
        int b=0; 一开始b中的水为0,(即b是空壶)
        while(b!=n)//只要b水壶不溢出,就让A水壶一直灌b水壶,水溢出的时候,b==0
        {
            for(int i=0;i<=(cb-b)/ca;i++)//将a中的水向b倒,直至b满或是b==n
            {
                cout<<"fill A"<<endl;
                cout<<"pour A B"<<endl;
                bnow = b+ca*(i+1);//没灌进一次a水壶的容量的水,b中的水量值
                if(bnow==n)如果在某一次后,b中的==n
                {
                    break;//不再灌
                }

            }
            if(bnow==n)
            {
                break;
            }
            cout<<"empty B"<<endl;//如果b已经被灌满了,但还是!=n,那么将b中的水全部倒掉
            int a;
            a=ca-(cb-b)%ca;//a中剩余的水量
            cout<<"pour A B"<<endl;
            b=a;//将b清空后,把a中剩余的水倒进b中
            if(b==n)
            {
                break;
            }
        }
        cout<<"success"<<endl;

    }


    return 0;
}

  本算法采用简化的方法,只是从A水壶向水壶B倒水,当b水壶满时就将b中的水倒掉,b成为空水壶,再从水壶A向b倒水,直到b水壶的水==n时.结束

原文地址:https://www.cnblogs.com/41412179guo/p/4476443.html