华为一道智力算法面试题(附C#实现)

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

解析

    这道智力算法面试题难度不太大,主要考察对最基本的循环算法和对需求逻辑的理解能力。在这道题中循环中不断用空瓶换汽水,直到所有空瓶不能再换为止。循环中先算出当前拥有的空汽水瓶可以换多少瓶汽水,然后累加到总共可以喝到的汽水瓶数中。接着更新空汽水瓶数,使之变为本次换完后剩下的空汽水瓶数。然后重新进行循环,直到空瓶不能再换为止。 最后考虑特殊情况,因为可能还剩下两个空瓶子,而两个空瓶子不能换一瓶汽水,所以需要判断一下。如果还剩下两个空瓶子,那么借一瓶汽水就可以换一瓶了,总共可以喝到的汽水瓶数需要再加1。

  C#示例代码:

public int MaxDrinks(int n)
{
    int total = 0;
    while (n >= 3)
    {
        int drinks = n / 3;
        total += drinks;
        n = n % 3 + drinks;
    }
    if (n == 2)
    {
        total += 1;
    }
    return total;
}

使用时,调用函数MaxDrinks(n),其中n为小张拥有的空汽水瓶数。返回值为小张最多可以喝到的汽水瓶数。整个代码逻辑很清晰,实现起来就十分简单。

结语

    这类面试题主要是第一次面试,主要考察对最基本的循环算法和对需求逻辑的理解能力,大家可以按照自己更优秀的方法解答即可。针对如上试题你有啥好的方法,欢迎留言讨论或者吐槽。

版权声明:本文来源于网友收集或网友供稿,仅供学习交流之用,如果有侵权,请转告小编或者留言,本公众号立即删除。

-

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值