解题思路:

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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论