六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 35|回复: 0

zoj 1005 jugs

[复制链接]

升级  29.33%

24

主题

24

主题

24

主题

秀才

Rank: 2

积分
94
 楼主| 发表于 2013-1-26 12:36:25 | 显示全部楼层 |阅读模式
  题目内容见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;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表