面试题-华为-空瓶换饮料问题-1

面试题-华为-空瓶换饮料问题-1

最近家庭发生了变故,又面临着来年去学校找实习的压力,折腾了大师兄给的任务之后,终于开始了实习面试的准备。
下面是从牛客网上找到的华为面试题,本作者在此引用仅供大家学习研究用,版权归原作者所有。

问题描述

[编程题] 汽水瓶
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

输入例子:
3
10
81
0

输出例子:
1
5
40

思考与解答

这道题网上有非常详细的解答,比如下面探路者的博客中的解答,大部分的解答都是把最后剩下的一瓶酒放在一边先不管,然后通过举例与推导求出了,

如果用a 表示换喝饮料 的瓶数,用 b表示原有的空瓶数,
用 N 表示换一瓶饮料需要的空瓶数,那么“空瓶换饮料”公式
用字母表示是:
a = (b 一 1) ÷(N 一 1)。

文章的思路是非常好的,解答的也非常的详细 ,但是本人数学不好,加上原博文中的公式表示有误,所以该方法并不适合我。我想既然有举例求解的过程,那么为什么还把问题搞那么复杂 ,在此我举例试了试:

空瓶数 可换瓶数
3 1
4 2
5 2
6 3

简单的分析之后,局势就变非常的明朗的:空瓶数是偶数时,可换瓶数为 瓶数/2 ;当瓶数为奇数时,可换瓶数为(瓶数-1)/2。

怎么感觉这面试题这么没有技术含量,哈哈哈。

参考代码

//判断一个数是不是偶数,如果是除以二,如果不是减1除以2
#include 
#include 
#include 

using namespace std;

const int N = 10;

int main()
{
    int i,in,a[N],count=0;
    for(i=0;i<10;i++)
    {
        cin>>in;
        if(in ==0)
            break;
        else
        {
        a[i] = in;
    }
        count++;
    }
//    for(i=0;i
//    {
//  cout<
//    }
    for(i=0;iif(a[i]%2==0)//偶数
        cout<2<else
        cout<<(a[i]-1)/2<return 0;
    }

顺便提一句,csdn的markdown 真好用,点个赞!

2017年2月7号,16:10.

你可能感兴趣的:(面试,华为,算法)