codePrac 发表于 2013-1-26 12:36:25

zoj 1005 jugs

  题目内容见zoj1005
  由于A,B互素且A的容量小于B,那么可以将B装满并且倒入A中,如果A被装满则将A中的内容全部清空,一直进行下去直到某一刻B中容量恰好等于目标的容量。这种方法能得到正确的结果,但是通常得不到最优结果。
 
#include <stdio.h>int main(void){int a,b,target,i;int curA,curB;while(scanf("%d %d %d", &a, &b, &target) == 3 )    {      curA = curB = 0;      if(target == b){printf("fill B\n");}      else if(target % a == 0){for(i = 1; i <= target/a; i++)    {      printf("fill A\n");      printf("pour A B\n");    }}      elsewhile(curB != target){curB = b;/*printf("curB:%d\n",curB);*/printf("fill B\n");while(curB >= a-curA)    {      curB -= a-curA;      /*      printf("curB:%d\n",curB);*/      printf("pour B A\n");      if(curB == target)break;      printf("empty A\n");      curA = 0;    }if(curB == target)    break;curA += curB;printf("pour B A\n");}      printf("success\n");    }return 0;}
页: [1]
查看完整版本: zoj 1005 jugs