zoj1005解题报告---菜鸟的第一篇解题报告

这是我的第一片解题报告,写的不好的,还望大家指出

zoj1005对于很多人来说是水题目,但是对我来说还是要思考好一会才能做出来的

下面是我的思路,首先那些操作步骤已经定了的,就那么7种,为了省点打字功夫,我存了一个字符串数组

然后就做题目,刚开始只考虑了4种情况,提交后过不了,然后想了很久,找不到原因,之后尝试转化为数学问题,发现了很多情况下有解的,我没有考虑到,而只考虑了集中特殊情况,这个其实有点像扩展欧几里得的,若a,b容量互质,则必有解,所以前四种情况不足以涵盖所有有解情况

后来加了情况5,提交上去可以通过,现在又发现,其实情况5已经包含了情况2,3,4的。代码如下

#include<stdio.h>
int main()
{
 int ca,cb,n,i,sum;
 char s[7][20]={"fill A","fill B","empty A","empty B","pour A B","pour B A","success"};
 while(scanf("%d %d %d",&ca,&cb,&n)!=EOF)
 {
  if(cb==n)/*情况1*/
   printf("%s\n",s[1]);
  else if(n%ca==0)/*2*/
   for(i=n/ca;i>0;i--)
    printf("%s\n%s\n",s[0],s[4]);
  else if((ca*(cb/ca+1))%cb==n%ca)/*3*/
  {
   for(i=(cb/ca+1);i>0;i--)
    printf("%s\n%s\n",s[0],s[4]);
   printf("%s\n%s\n",s[3],s[4]);
   for(i=n/ca;i>0;i--)
    printf("%s\n%s\n",s[0],s[4]);
  }
  else if((cb-n)%ca==0)/*4*/
  {
   printf("%s\n",s[1]);
   for(i=(cb-n)/ca;i>0;i--)
    printf("%s\n",s[5]);
  }
  else/*5*/
  {
   sum=0;
   while(sum!=n)
   {
    sum=sum+ca;
    printf("%s\n%s\n",s[0],s[4]);
    if(sum>cb)
    {
     sum=sum-cb;
     printf("%s\n%s\n",s[3],s[4]);
    }
   }
  }
   printf("%s\n",s[6]);
 }
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值