原题链接:汽水瓶
解题思路:
1、通过while循环来模拟兑换的过程
2、用sum变量记录总共可兑换的瓶数
3、一次循环就是进行一轮兑换
4、本轮可进行兑换的空瓶子数n 除以3,就是本轮兑换到的瓶数,并加给n和sum
5、再计算本轮没兑换的空瓶子数 num%3
6、将没兑换的空瓶子数 加到 本轮兑换的瓶子数(得到下一轮的瓶子数)
7、这样一直兑换到最终瓶子数少于3个,退出循环
8、如果最终的瓶子数等于2个,就可以借1,再兑换一次汽水
注意事项:
重点理解:
在每一轮进行兑换的时候,用代码表示的先后顺序,还有方便计算的num变量,每个变量的含义
int num = n;//用于每一轮兑换后剩余的空瓶数量
int sum = 0;//换的汽水瓶数
while(1)
{
if(num == 1||num == 2)//最终剩下的空瓶子数少于三个,退出兑换
{
break;
}
n = n / 3;//这一轮兑换的瓶数
sum += n;//这一轮兑换的瓶数累加
n += num % 3;//这一轮没兑换的空瓶数 累加到 这一轮的兑换的瓶数上 相当于 本轮下来剩余的空瓶子数
num = n;//记录本轮剩下的空瓶子数,便于下一轮计算
}
参考代码:
#include<stdio.h>
void test72(int n)
{
int num = n;//用于每一轮兑换后剩余的空瓶数量
int sum = 0;//换的汽水瓶数
while(1)
{
if(num == 1||num == 2)//最终剩下的空瓶子数少于三个,退出兑换
{
break;
}
n = n / 3;//这一轮兑换的瓶数
sum += n;//这一轮兑换的瓶数累加
n += num % 3;//这一轮没兑换的空瓶数 累加到 这一轮的兑换的瓶数上 相当于 本轮下来剩余的空瓶子数
num = n;//记录本轮剩下的空瓶子数,便于下一轮计算
}
if(num ==2)//剩下的瓶数等于二瓶,就借用一瓶
{
sum += 1;//可再兑换一次
}
printf("%d\n", sum);
}
void test73()
{
while (1)
{
int n = 0;
scanf("%d", &n);
if (n == 0)
{
break;
}
test72(n);
}
}
int main()
{
test73();
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复