Sapphire


私信TA

用户名:1368205885

访问量:4719

签 名:

无限进步!

等  级
排  名 740
经  验 3830
参赛次数 0
文章发表 16
年  龄 18
在职情况 学生
学  校
专  业 软件工程

  自我简介:

汽水瓶

Sapphire

2022/2/22

解题思路:
不论有多少个空汽水瓶,最后剩余的汽水瓶(n)一共只有三种情况。

  1. 剩余1个,可以兑换的汽水数就是n/3;

  2. 剩余2个,由于可以向老板借一瓶,所以可以兑换的汽水数是n/3+1;

  3. 剩余3个,直接就是n/3+1。

如果剩余4个,则相当于n/3+1后再剩一个,回到情况1。

如果剩余5个,则相当于n/3+1后剩两个,回到情况2。

如果剩余6个,则相当于剩余n/3+1后剩余三个,回到情况3。


注意事项:

  1. n=n/3+n%3的意思是说,比如空汽水瓶有8个,8/3=2代表能换两个,并且喝完后又有一个空的,8%3=2代表还有2个空汽水瓶没换着,那么这时就有2+2=4个空汽水瓶,4>3,进入递归,4/3+4%3==2,是情况2,则count+1,游戏结束。

  2. static int count=0;//由于每进入一次函数,形参会被摧毁,所以用static来修饰,防止count的值在每次调用函数时被遗忘。

 
参考代码:

#include <stdio.h>
static int count=0;//由于每进入一次函数,形参会被摧毁,所以用static来修饰 
int cola(int n)
{
    count+=n/3;
    n=n/3+n%3;
    if(n>3)
    {
        cola(n);//如果汽水瓶大于三个,则递归,直到算到剩余3个以内为止 
    }
    if(n==1)
        return count;
    if(n==2||n==3)
        return count+1;
}
int main()
{
    int n;
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%d",&n);
        if(n)
            count=cola(n);
        else
            break;
        printf("%d\n",count);
        count=0;
    }
    return 0;
}

如果这篇文章有帮助到你,希望你给一个赞,加油,陌生人!

 

0.0分

2 人评分

  评论区

  • «
  • »