zoj 1005 Jugs(数学做法,还可以用BFS(我不会))

2 篇文章 0 订阅

首先注意这是一道  Special Judge题目,方案可能多种,找出一种即可

本来是一道练习BFS的题,由于不会记录方案,就找了别人的思路,惊喜的发现,利用数论方面的知识可以轻松解决:

我们只需要不停地用小桶给大桶里灌水,如果大桶水==N则终止,如果大桶满了就把大桶水倒掉继续。。。。这种方法只用到给出来的步骤中的其中四个。。。。。

至于证明,用到数论里的知识了。。。。。我不得不承认,数论真的很强大!!!唉,我把数论先放过去了没学,回来再看数论吧。。。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define STOP system("pause")
#define fulA 0
#define eptA 1
#define eptB 2
#define AtoB 3
int main()
{
    int ca,cb,n;
    char s[4][10]={"fill A","empty A","empty B","pour A B"}; 
    int counta,countb; 
    while(scanf("%d%d%d",&ca,&cb,&n)!=EOF)
    {
        counta=countb=0;
        while(1)
        {
            if(counta==0)
            {
               counta=ca;
               puts(s[fulA]);
            }
            puts(s[AtoB]);
            if(countb+counta>cb)
            {
                counta=counta-(cb-countb);
                countb=cb;
            }
            else
            {
                countb+=counta;
                counta=0;
            }       
            if(countb==n)
              break;
            if(countb==cb)
            {
              puts(s[eptB]);
              countb=0;
            }
        }
        printf("success\n");
    }  
  return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值