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

来源:互联网 发布:淘宝购物要上传身份证 编辑:程序博客网 时间:2024/05/16 01:06

首先注意这是一道  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 3int 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;}


原创粉丝点击