汽水瓶问题的简单解决(c语言描述)

蓝桥杯练习系统里面第一道标注“难题”的题目——汽水瓶(选自湖南省第六届大学生计算机程序设计竞赛)

原题为:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
在这里插入图片描述
乍一看这个题目的描述,比较麻烦,特别是看到,最后剩两个水瓶时,还可以向老板借一瓶汽水,喝掉凑好三个空瓶子,再还给老板。感觉好麻烦的样子。但是这些都只是唬人的,表面现象嘛。而且虽然标注了难题,但毕竟是第一道题啊,应该不会太变态的。
我们先列出几项来看看:

空瓶子个数n最多得到的汽水个数
00
10
21
31
42
52
63
73

通过上面的表格,小伙伴们是不是已经看出它的规律了呢?
这些值的得到并不难,简单的动手推一下就出来了,现在我们的任务就是要把这两列数值用一些数学关系联系起来,仔细观察不难发现,空瓶子个数除以2,不管其余数是否为0(得到的余数只有0和1),最多得到的汽水个数就是这个运算得到的商。发现这个规律之后,问题就迎刃而解了。当然代码也很简单。
贴上源代码:

#include<stdio.h>
#define M 10000
int main()
{
    int a[M],i=-1,j,k;      //数组a[M]用来存放空瓶子个数
    do
    {
        i++;
        scanf("%d",&a[i]);
    }
    while(a[i]!=0);   //题目要求遇到0表示输入结束
    for(j=0;j<i;j++)
    {
        if(a[j]%2==0)
            k=a[j]/2;  //k就是最后我们要求的最多得到汽水的个数
        else
            k=(a[j]-1)/2;
            printf("%d\n",k);
    }
    return 0;
}
  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值