题解 | #汽水瓶#
汽水瓶
https://www.nowcoder.com/practice/fe298c55694f4ed39e256170ff2c205f
代码中有注释,可以注释和思路结合着看。
解题思路
由题意得当汽水瓶数量>=2时都可以换新的汽水,在剩余瓶子为2时可以借一个凑够三个瓶子换一个。
运算次数 | a | sum | temp | a=a+temp(剩余空瓶数) |
初始 | 10 | 0 | 0 | |
1 | 10/3=3 | 10/3=3 | 10%3=1 | 3+1=4 |
2 | 4/3=1 | 3+4/3=4 | 4%3=1 | 1+1=2 |
3 | 2 | sum++=4+1=5 |
#include <stdio.h> int main() { int a[10]={0};//用于接收初始汽水瓶数 int i=0,sum[10]={0};//sum[i]用于统计对应a[i]可以喝几瓶汽水 int temp=0;//用于存a[i]与三的余数,也就是去换汽水时不足三瓶不能兑换的空瓶子 while(scanf("%d",&a[i])!=EOF) { if(a[i]==0||i>9)//判断当接收的数据为0或者超过数组上限时直接跳出当前循环 { break; } while(1) { if(a[i]<2)//当瓶子数量不足2时,借一个瓶子也不够三因此直接跳过不计算 { break; } else if(a[i]>=2)//当瓶子数量大于等于2时,满足题意可以计算 { if(a[i]==2)//当剩余空瓶子数量等于2时,可以找老板借一个瓶子,换得一瓶汽水,且瓶子需要归还,所以直接在可以喝的汽水总数+1,然后跳出循环 { sum[i]++; break; } temp=a[i]%3; a[i]=a[i]/3; sum[i]=sum[i]+a[i]; a[i]=a[i]+temp; } } printf("%d\n",sum[i]); i++; } return 0; }