poj3414_pots

此题我的算法思想很简单,两罐的水容量之差的倍数一定可以通过倒水得到;

每通过一组倒水动作就能得到差的一个倍数,每次加一倍;

结果就是wrong answer,可能是我考虑的不完善,希望大家帮忙提提意见,我的错在哪;

本人也在苦苦思索啊。。。。



#include<iostream>



using namespace std;
int t;
bool times(int a,int b,int c)
{
    int m = b-a;
    if(c%m!=0){cout<<"impossible"<<endl;return false;}
    else{
        t = c/m;    //代表倒水次数(一组动作的次数)
        return true;
    }
}
int main()
{
    int a,b,c;
    int n[2];
    bool temp;
    cin>>a>>b>>c;
    if(a>b){n[0]=1,n[1]=2;temp=times(b,a,c);}
    if(a<b){n[0]=2,n[1]=1;temp=times(a,b,c);}
    if(c==a){cout<<1<<endl<<"FILL(1)"<<endl;}
    else if(c==b){cout<<2<<endl<<"FILL(2)"<<endl;}
    else

    {

    //第一组动作两步就可以,以后开始就要4步完成一组动作;

    //每组动作后就可以得到 n倍的两桶容量的差值

        if(temp){
            if(t==1){cout<<2<<endl<<"FILL("<<n[0]<<")"<<endl<<"POUR("<<n[0]<<","<<n[1]<<")"<<endl;}
            else{
                cout<<(t-1)*4+2<<endl;
                cout<<"FILL("<<n[0]<<")"<<endl<<"POUR("<<n[0]<<","<<n[1]<<")"<<endl;
                while(t>1){
                    cout<<"DROP("<<n[1]<<")"<<endl<<"POUR("<<n[0]<<","<<n[1]<<")"<<endl;
                    cout<<"FILL("<<n[0]<<")"<<endl<<"POUR("<<n[0]<<","<<n[1]<<")"<<endl;
                    t--;
                }
            }
        }


    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值