2013阿里巴巴笔试题选解

首先题目如下:

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个数字做题目中的操作,最终的结果如下:

  1.       n=4m,m为正整数(下面m同样为正整数)。此时1到n就有偶数个奇数,那么最终操作的结果为0、2、4....n
  2.       n=4m + 1,那么此时奇数的个数比4m增加了一个,则共存在奇数个奇数。最终的结果为1、3、5...n。
  3.       n=4m + 2,那么奇数的个数仍然为奇数;最终的结果还是1、3、5...n-1。
  4.       n=4m + 3。此时奇数的个数就为偶数个。最终的结果为0、2、4...n - 1。
       按题目中1到50操作,最终得到的结果为1、3、5...49中间这些所有的奇数。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值