常规迭代
#include <stdio.h>
int main()
{
//记录一开始拿到的瓶数
int full = 0;
//测试用例分隔,非法输入跳过
while(scanf("%d",&full)!=EOF&&full!=0)
{
//记录余数
int re = 0;
//记录取整结果
int mul = 0;
//记录总共换取的瓶数
int result = 0;
while(1)
{
// 10/3=3...1
// (3+1)/3=1...1
// (1+1)/3=0...2
//result = 3+1+0 + 1(借瓶)
mul = full/3;
re = full%3;
result += mul;
if((mul+re)<2)
{
//瓶子不够了
break;
}
else if((mul+re)==2)
{
//借了一个空瓶
result++;
break;
}
else
{
//取整加余数
full = mul+re;
}
}
printf("%d\n",result);
}
return 0;
}
数学处理
然而可以有更巧妙的数学办法解决
三瓶换一瓶,允许借,那么可以一喝两瓶就去换,也就是每两瓶就能换一瓶,直接将输入除以二取整即可
#include <stdio.h>
int main()
{
int full = 0;
while(scanf("%d",&full)!=EOF&&full!=0)
{
printf("%d\n",full/2);
}
return 0;
}