两个杯子按大小排序,为S>M>N,
1.只要n满了,就把n里的东西放到s中
2.只要m非空,就把m中的放到n中
3.如果m为空,把s中的放到m中
超时代码#include<stdio.h>
int n, m, s;
int main()
{
while(scanf("%d%d%d",&s,&n,&m)!=EOF)
{
if(s==0 && n==0 && m==0)
break;
if(n<m)
{
int i;
i= m;
m = n;
n = i;
}
int a, b=n, c=0, sum=1;
a = s - n;
while(a)
{
if(a==b)
{
printf("%d\n",sum);
break;
}
if(c==0)
{
b = b - m;
a = a + m;
sum += 2;
if(b>a && b-m<a+m)
{
printf("NO\n");
break;
}
}
}
}
}
未超时代码
#include<stdio.h>
int s;
int a;
int b;
int ss;
int aa;
int bb;
int num;
int main()
{
int i,j;
while(1)
{
scanf("%d%d%d",&s,&i,&j);
if(s==0 && i==0 && j==0)
break;
ss = s;
aa = 0;
bb = 0;
num = 0;
a = i>j ? i : j;
b = i<j ? i : j;
while(1)
{
if(ss==b && aa==a && num>1)//未得到均分
{
printf("NO\n");
break;
}
if(ss==aa && bb==0)//得到均分
{
printf("%d\n",num);
break;
}
if(bb==b)//若小杯子里装满可乐,将小杯子里的可乐倒入可乐瓶中
{
ss += b;
bb = 0;
num++;
continue;
}
if(aa>0 && aa<=a)//若大杯子里有可乐
{
if(aa>b-bb)//若大杯子里的可乐多余小杯子容积,将可乐倒入小杯子里
{
aa -= b-bb;
bb = b;
}
else//若大杯子里的可乐少余小杯子容积,还是将大杯子里的可乐倒入小杯子中
{
bb+=aa;
aa=0;
}
num++;
continue;
}
else//若大杯子里无可乐
{
if(ss>=a)//若瓶子里的可乐多余大杯子容积,将瓶子里的可乐倒入大杯子中
{
ss -=a;
aa=a;
}
else//若瓶子里的可乐少余大杯子容积,还是将瓶子里的可乐倒入大杯子中
{
ss=0;
aa=ss;
}
num++;
}
}
}
}