华为有这样一道智力算法面试题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是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编程大全