分红酒_蓝桥杯



标题:分红酒

  有4个红酒瓶子,它们的容量分别是:9升, 7升, 4升, 2升
  开始的状态是 [9,0,0,0],也就是说:第一个瓶子满着,其它的都空着。
  允许把酒从一个瓶子倒入另一个瓶子,但只能把一个瓶子倒满或把一个瓶子倒空,不能有中间状态。这样的一次倒酒动作称为1次操作。
  假设瓶子的容量和初始状态不变,对于给定的目标状态,至少需要多少次操作才能实现?
  本题就是要求你编程实现最小操作次数的计算。
 
  输入:最终状态(逗号分隔)
  输出:最小操作次数(如无法实现,则输出-1)

例如:
输入:
9,0,0,0
应该输出:
0
输入:
6,0,0,3
应该输出:
-1
输入:
7,2,0,0
应该输出:

2

没办法提交,也不知道自己写的对不对,希望各位路过的大神指正

#include<cstdio>
#include<iostream>
using namespace std;
int b[4]={9,7,4,2};
int A[4]={9,0,0,0};
int main()
{
 int a[4],count=0;
 char e,f,g;
 while(scanf("%d%c%d%c%d%c%d",&a[0],&e,&a[1],&f,&a[2],&g,&a[3])!=EOF){
  
  if(a[0]==A[0]&&a[1]==A[1]&&a[2]==A[2]&&a[3]==A[3])count=0;
  else {
   for(int i=1;i<4;i++){
   int flag=true;
   if(a[i]>b[i]){
    count=-1;break;
   }else if(a[i]==b[i])
         count++;
   else if(a[i]<b[i]&&a[i]>0){
    int m=a[i];
    for(int i=1;i<4;i++){
     if(m==b[i]){
      flag=false;break;
     }
        
    }
    if(flag){
      count=-1;break;
    }
    else
         count += 2;
   }
  } 
  }
  printf("%d\n",count);
 }

 return 0;
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值