ROG


私信TA

用户名:dotcpp0688243

访问量:5495

签 名:

等  级
排  名 2435
经  验 2309
参赛次数 0
文章发表 8
年  龄 0
在职情况 学生
学  校 广东技术师范大学
专  业 数字媒体技术

  自我简介:

解题思路:

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 人评分

  评论区

  • «
  • »