分红酒_蓝桥杯

来源:互联网 发布:赵本山政治问题 知乎 编辑:程序博客网 时间:2024/04/24 10:31


标题:分红酒

  有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
原创粉丝点击