今年的华为机试跟以往的有所不同,以往机试题侧重于字符串处理,分数权重为:60、100、160。今年貌似改革了,题目都偏向数学逻辑类。
1、猴子吃桃
题目描述:
猴子第一天摘下若干个桃子,当即吃了一半还不过瘾,又多吃了一个。第二天早上有奖剩下的桃子吃掉一般,又多吃了一个。以后每天早上都吃了前一天剩下的一般零一个。到第m天早上再吃时,只剩下一个桃子。求第一天共摘了多少?
输入:mwield天数,即第m早上再想吃时,只剩下一个桃子。
输出:第一天共摘了多少个桃子。
样例输入:2
样例输出:4
答题思路:
从第m天推起,第m天为1个;第m-1天为(1+1)*2个;第m-2天为……以此反推,for循环就可以搞定。
2、海滩上有多少个桃子
题目描述:
海滩上有一堆桃子,只猴子来分。第一只猴子把这堆桃平均分为m份,多了一个,把多的一个扔到海里,拿走了一份。第二只猴子把剩下的桃子又平均分为m份,多了一个,丢入海里,拿走了一份……第三第四……第m只猴字都这样操作,请问海滩上原来最少有多少个桃子?
输入:猴子个数m(3<=m<=9)
输出:原来最少有多少个桃子
样例输入:3
样例输出:25
答题思路:
楼主是暴力求解的,所以效率比较低,i从第1开始,认为最后剩i个,再网上推算,能否被m整除……(最后有一个测试用例没过,仔细想来应该是m=9时,溢出了,因为楼主是先乘后除的,所以问题应该出在这,以后牢记经验了)。
回来后,差了一下猴子分桃这个经典案例,这位大神博客中有写得比较详细和巧妙:http://blog.csdn.net/hackbuteer1/article/details/6914395
经验教训:
要注意大数问题,像这种情况,long long比较保险一点,另外,做乘除时,能先除的先除,乘放在后面,避免溢出问题!!!!!
2、自动售货系统
题目太长了,直接上图好了
答题思路:
题目很长,但不算难,捋顺了逻辑就好了。楼主后面也有一个测试用例没过,真是伤感。猜测了一下,应该是当输入太长了,自动换行时没有读全……
经验教训:
以后做题时一定要好好考虑边界、异常等比较全面的测试用例!!!!