常规迭代
#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;}
