| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5342 人关注过本帖, 1 人收藏
标题:2个汽水空瓶或者4个瓶盖可以换1瓶汽水,现在有n瓶汽水,问可以多喝到多少瓶汽 ...
只看楼主 加入收藏
独言望月
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-9-20
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:10 
2个汽水空瓶或者4个瓶盖可以换1瓶汽水,现在有n瓶汽水,问可以多喝到多少瓶汽水。希望各位大佬给个c语言的模板
2个汽水空瓶或者4个瓶盖可以换1瓶汽水,现在有n瓶汽水,问可以多喝到多少瓶汽水
搜索更多相关主题的帖子: 多少 c语言 模板 
2017-12-05 21:29
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
a个盖,b个瓶
可喝得 a/4 + b/2 瓶汽水
变为 a/4 + b/2 + a%4 个盖,a/4 + b/2 + b%2 个瓶

循环
2017-12-05 22:14
Deza_Mearine
Rank: 2
等 级:论坛游民
帖 子:9
专家分:24
注 册:2017-11-14
收藏
得分:4 
#include<stdio.h>
int main(void)
{
    int n, m, a1, a2, n1, n2;
    scanf("%d", &n);
    n1=n2=n;
    while (m!=0)
    {
        a1=n1%2;
        a2=n2%4;
        m=n1/2+n2/4;
        n1=a1+m;
        n2=a2+m;
        n+=m;
    }
    printf("%d", n);
    getchar();
    getchar();
    return 0;
}
2017-12-05 22:16
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:4 
程序代码:
int DrinkGas(int n)
{
    int gas=n;
    int bottle=n;
    int lid=n;
    int tp;
    while(bottle>=2 || lid>=4)
    {
        while(bottle>=2)
        {
            tp=bottle/2;
            bottle=bottle%2;

            gas+=tp;
            bottle+=tp;
            lid+=tp;
        }
        while(lid>=4)
        {
            tp=lid/4;
            lid=lid%4;

            gas+=tp;
            lid+=tp;
            bottle+=tp;
        }
    }
    printf("bottle=%d,lid=%d\n",bottle,lid);
    return gas;
}

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-12-05 22:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
方法一,死算
程序代码:
unsigned foo( unsigned n )
{
    unsigned a=n, b=n, c=n;
    for( ; a>=2 || b>=4; )
    {
        unsigned t = a/2 + b/4;
        a = a%2 + t;
        b = b%4 + t;
        c += t;
    }
    return c;
}

方法二,如果初始量足够,最后留下一个瓶三个盖;根据“2个汽水空瓶或者4个瓶盖可以换1瓶汽水”推导出 汽水价值1,瓶价值2,盖价值1。
unsigned bar( unsigned n )
{
    return n<2 ? n : 4*n-5;
}


2017-12-06 09:08
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:4 
5楼第二种算法很有深度

还曾经做过类似的题目~推广到一般情况下……其实最终剩下的物品所包含的情况是一个有限点集,写出集合里面的一般情况就可以推导出所有解集~

当n>=2时,这题的有限集合就只有一个……一个空瓶和三个盖~

https://bbs.bccn.net/thread-481662-1-1.html

相对这个贴的有限点集多了一种情况,不过原理却是一样的~



[此贴子已经被作者于2017-12-6 12:33编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-06 11:38
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:0 
回复 5楼 rjsp
对于方法二:
想问为什么最后会剩下一个瓶子三个盖子?不能是一个瓶两个盖子,或者是一个瓶子一个盖子等情况?
还有就是根据您说的“汽水价值1,瓶子价值2,盖子价值1”的方法,如何理解算出的公式4*n-5?(当然如果用归纳法肯定可以,相信您有其他的方法)

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-12-06 18:47
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 Alien_Lee
以下是引用Alien_Lee在2017-12-6 18:47:16的发言:

对于方法二:
想问为什么最后会剩下一个瓶子三个盖子?不能是一个瓶两个盖子,或者是一个瓶子一个盖子等情况?
还有就是根据您说的“汽水价值1,瓶子价值2,盖子价值1”的方法,如何理解算出的公式4*n-5?(当然如果用归纳法肯定可以,相信您有其他的方法)


我来试着帮忙回答一下吧
你的第一个问题就是用归纳法啊,假设现在有一个空瓶和三个瓶盖,然后加一瓶汽水,通过兑换,最终状态可以推导出还是一个空瓶和三个瓶盖~

至于公式为什么会是这个,我大概他的意思是在一个空瓶和三个瓶盖的情况下外加一瓶汽水终端状态通过瓶子兑换汽水的有两次,通过瓶盖兑换的有一次,所以一瓶汽水最终能兑换三次,加上原来的,n的系数就是4了~



[此贴子已经被作者于2017-12-6 19:59编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-06 19:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
谢谢九转星河

想问为什么最后会剩下一个瓶子三个盖子?
------ 一个瓶子好理解,因为最后喝汽水时自然会留下一个瓶子;当“一个瓶子三个盖子”时添加一个新汽水(包括瓶子和盖子)后,最终还是“一个瓶子三个盖子”,也就是“一个瓶子三个盖子”稳定了,只要初始给出的汽水数大于某个值后结果永远是这样。

“汽水价值1,瓶子价值2,盖子价值1”
------ 2瓶 = 1瓶 + 1盖 + 1水
       4盖 = 1瓶 + 1盖 + 1水
解方程组得到 瓶=2水,盖=1水。

如何理解算出的公式4*n-5?
------ 一个完整的汽水 是 1瓶 + 1盖 + 1水,其价值是4水(上面算出了 瓶=2水,盖=1水),也就是 一个完整的汽水 完全换成 水,可以换4份水。
因为最后留下“一个瓶子三个盖子”,也就是留下了5水(上面算出了 瓶=2水,盖=1水)
2017-12-07 08:48
峰哥不是
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:75
注 册:2013-11-19
收藏
得分:4 
留个名字,毕竟水了这么多年

纸上得来终觉浅,绝知此事要躬行
2017-12-07 09:53
快速回复:2个汽水空瓶或者4个瓶盖可以换1瓶汽水,现在有n瓶汽水,问可以多喝到多 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.076938 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved