2013阿里巴巴笔试题选解
2013-10-14 20:19
190 查看
首先题目如下:
5、在黑板上写下50个数字:1至50.在接下来的49轮操作中,每次做如下动作:选取两个黑板上的数字a和b,擦去,在黑板上写|b
- a|。请问最后一次动作之后剩下数字可能是什么?为什么?
一开始暂时没解题的思路,于是简单写了段程序测试一下:
运行结果如下:
last integer: 13
last integer: 1
last integer: 15
last integer: 7
last integer: 13
last integer: 27
last integer: 39
last integer: 11
last integer: 9
last integer: 1
显然上面的结果均为奇数。于是便可以想到题目中最后剩下的数字应该是一个奇数,于是可以从数字的奇偶性思考。1到50个数字操作的结果为奇数的理由很容易想到:假设有1到n个数进行题目中提到的操作,那么每一次取a、b两个数字进行|a-b|,那么最终的结果可能是减少两个奇数,增加一个偶数;减少两个偶数再增加一个偶数;或者减少一奇一偶,增加一个奇数。因此奇数只能两个两个减少、或者不减少。那么由于1到50个数字中总共存在25个奇数,因此最终的剩下的一个数字必然是奇数。接下来就是是关于这个奇数的取值范围的问题。当然显然最终的结果在0到50之间。那么问题就只剩下是否0到50之中的奇数是否都能到的问题。
如果我们将数字减少到1、2、3三个数字,那么按照题目中的操作,最后剩下的数字就是0、2两个。如果再增加一个数字到4,首先4-2、4-0,即最终结果2、4是可以得到的;又因为在n为4的倍数,即有偶数个奇数的情况下,将这些数字安装1和2、3和4...分组求绝对值,最终结果可以得到偶数个1,两两求绝对值,就可以得到0的结果。然后将数字增加到5,那么最终的结果就是5-0、5-2、5-4,即1、3、5。
因此可以做进一步的推论,对于任意1到n个数字做题目中的操作,最终的结果如下:
n=4m,m为正整数(下面m同样为正整数)。此时1到n就有偶数个奇数,那么最终操作的结果为0、2、4....n
n=4m + 1,那么此时奇数的个数比4m增加了一个,则共存在奇数个奇数。最终的结果为1、3、5...n。
n=4m + 2,那么奇数的个数仍然为奇数;最终的结果还是1、3、5...n-1。
n=4m + 3。此时奇数的个数就为偶数个。最终的结果为0、2、4...n - 1。
按题目中1到50操作,最终得到的结果为1、3、5...49中间这些所有的奇数。
5、在黑板上写下50个数字:1至50.在接下来的49轮操作中,每次做如下动作:选取两个黑板上的数字a和b,擦去,在黑板上写|b
- a|。请问最后一次动作之后剩下数字可能是什么?为什么?
一开始暂时没解题的思路,于是简单写了段程序测试一下:
public class RemovingInteger { public static int ARRAY_SIZE = 9; public static void main(String args[]) { for (int j = 0; j < 10; j++) { ArrayList<Integer> integers = new ArrayList<Integer>(); for (int i = 1; i <= ARRAY_SIZE; i++) { integers.add(i); } Random random = new Random(); for (int i = 0; i < ARRAY_SIZE - 1; i++) { int index1 = random.nextInt(integers.size()); int index2; do { index2 = random.nextInt(integers.size()); } while (index1 == index2); int abs = Math.abs(integers.get(index1) - integers.get(index2)); integers.remove(index1); if (index1 > index2) { integers.remove(index2); } else { integers.remove(index2 - 1); } integers.add(abs); } for (Integer integer : integers) { System.out.println("last integer: " + integer); } } } }
运行结果如下:
last integer: 13
last integer: 1
last integer: 15
last integer: 7
last integer: 13
last integer: 27
last integer: 39
last integer: 11
last integer: 9
last integer: 1
显然上面的结果均为奇数。于是便可以想到题目中最后剩下的数字应该是一个奇数,于是可以从数字的奇偶性思考。1到50个数字操作的结果为奇数的理由很容易想到:假设有1到n个数进行题目中提到的操作,那么每一次取a、b两个数字进行|a-b|,那么最终的结果可能是减少两个奇数,增加一个偶数;减少两个偶数再增加一个偶数;或者减少一奇一偶,增加一个奇数。因此奇数只能两个两个减少、或者不减少。那么由于1到50个数字中总共存在25个奇数,因此最终的剩下的一个数字必然是奇数。接下来就是是关于这个奇数的取值范围的问题。当然显然最终的结果在0到50之间。那么问题就只剩下是否0到50之中的奇数是否都能到的问题。
如果我们将数字减少到1、2、3三个数字,那么按照题目中的操作,最后剩下的数字就是0、2两个。如果再增加一个数字到4,首先4-2、4-0,即最终结果2、4是可以得到的;又因为在n为4的倍数,即有偶数个奇数的情况下,将这些数字安装1和2、3和4...分组求绝对值,最终结果可以得到偶数个1,两两求绝对值,就可以得到0的结果。然后将数字增加到5,那么最终的结果就是5-0、5-2、5-4,即1、3、5。
因此可以做进一步的推论,对于任意1到n个数字做题目中的操作,最终的结果如下:
n=4m,m为正整数(下面m同样为正整数)。此时1到n就有偶数个奇数,那么最终操作的结果为0、2、4....n
n=4m + 1,那么此时奇数的个数比4m增加了一个,则共存在奇数个奇数。最终的结果为1、3、5...n。
n=4m + 2,那么奇数的个数仍然为奇数;最终的结果还是1、3、5...n-1。
n=4m + 3。此时奇数的个数就为偶数个。最终的结果为0、2、4...n - 1。
按题目中1到50操作,最终得到的结果为1、3、5...49中间这些所有的奇数。
相关文章推荐
- 阿里巴巴2013实习招聘笔试题5月19日
- 阿里巴巴2013笔试题 算法/研发岗 【详解】
- 阿里巴巴2013笔试题
- 阿里巴巴2013实习生笔试题精选2道算法题
- 2013阿里巴巴实习笔试题 最后两题 明星问题+仓库运货
- 阿里巴巴2013实习生笔试题精选2道算法题
- 2013阿里巴巴校园招聘笔试(大题,无解答)
- 2013阿里巴巴暑期实习生笔试题目
- 阿里巴巴2013实习生笔试题(选择题)
- 2013阿里巴巴安全工程师实习生招聘笔试小结
- 2013阿里巴巴安全工程师笔试试题_复习使用
- 阿里巴巴2013笔试题
- 武汉阿里巴巴2013校园招聘笔试题
- 阿里巴巴2013最新笔试题(查找树中相同节点对)
- 阿里巴巴2013笔试最后一题解答
- 2013 阿里巴巴算法、数据工程师笔试题选解
- 阿里巴巴2013笔试题 最后大题的分析(网络资料整理)
- 2013阿里巴巴实习生笔试
- 阿里巴巴2013实习生笔试题精选2道算法题
- [笔试题] 阿里巴巴2013技术类笔试题(完整版手工记录+详细解析)