题解 | #汽水瓶#
汽水瓶
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;
}
查看9道真题和解析