[笔试题]黑板上写下50个数字,选两个黑板上数字a和b,在黑板写|b-a|,剩下的数字?

在黑板上写下50个数字:1至50。在接下来的49轮操作中,每次做如下操作:选取两个黑板上的数字a和b,擦去,在黑板上写|b-a|。请问最后一次动作之后剩下的数字可能是什么?为什么?(不用写代码,不写原因不得分)(阿里巴巴笔试题)

将题目通用化,即变成给定1..n这n个数字,操作到最后剩下的数字可能是什么。则原题即是n=50的特例。

 

首先我们有结论1:假设操作1..n,最后剩下的可能数字的个数为k,则操作1..(n+1)时,剩下数字的个数将大于等于k。这个结论简单的用反证法证明下——假设存在n,使得操作1..n时,剩下的数字个数k,操作1..(n+1)剩下可能数字的个数为p,且k>p。则令1..n时的k个数为a[1],a[2]…a[k],显然它们互不相等。则1..n+1时,如果最后使用数字n+1与a[1]…a[k]做操作,得到|a[1]-(n+1)| … |a[k]-(n+1)|,此时k=p,不满足假设,则假设不成立,原命题成立。

 

然后再来个结论2:操作1..n所有可能剩下的数字必定都小于等于n。这个显然成立,因为对任意非负数a,b,|b-a|<=max(a,b)必定成立。

 

开始解题。

 

对于操作1..n这n个数,若只观察它们的奇偶性,则会发现,当选取任意两个数a,b做操作时,若两个均为偶数,则结果也为偶;两个奇数,结果为偶;一奇一偶,结果为奇。而这点跟异或完全相同,即令0代表偶数,1代表奇数,则0^0=1^1=0,0^1=1^0=1。因此,当操作1..n时,其剩下数字的奇偶性就等于1^0^1^0…^1(n为奇)/0(n为偶),是个确定值,即剩下的数必定都为奇数或都为偶数(异或与顺序无关)。进一步发现,当1^0^1^0…式子中1的个数为奇数时,结果为1,即剩下的数必定都为奇数;1的个数为偶,结果为0,剩下的数字必定都为偶数。

 

因此我们有如下假设的结论:对于1..n,当┌n/2┐为奇数(┌n┐表示不小于n的整数)时,剩下的数字为1,3,5… 2i+1(其中2*i+1为小于等于n的最大奇数);当┌n/2┐为偶数时,剩下的数字为0,2,4…2*i(2*i为小于等于n的最大偶数)。

 

下面用数学归纳法证明该假设。

1).当n=3时,可能剩下的数字为0,2,假设成立;n=4时,剩下的数字为0,2,4,假设成立;n=5时,为1,3,5,假设成立。

2).假设当n=k时,假设成立。即1..k时,若┌k/2┐为奇,则为1,3,5…2*i+1;┌n/2┐为偶,则为0,2,4…2*i。则现在需证明n=k+1时,假设仍成立。

3).当n=k+1时,若此时┌k/2┐为奇时,则再分为两种情况:k为奇数,或k为偶数。当k为奇数时,1^0^1…^1=1,再异或偶数k+1,1^0=1,则此时操作1…k+1剩下的数字仍然均为奇数,再根据结论1和结论2可知,剩下数字的个数应大于等于n=k,且最大奇数不能大于偶数k+1,则唯一的可能就是1..k+1剩下的数字与1..k剩下的数字相同,此情况符合假设。当k为偶数时,1^0^…^0=1,再异或奇数k+1,1^1=0,则此时操作1..k+1剩下的数字均为偶数,但结论1,2要求其个数应该大于等于n=k时的个数,且最大数不能大于k+1,则唯一的可能就是0,2…k,此情况仍符合假设。最后┌k/2┐为偶的情况,也可根据该奇偶性和结论1,2易证得该假设成立。故n=k+1时,假设仍然成立。

4).最后回到题目上来,令n=50,则根据结论可知,可能剩下的数字为1,3,5…49。

原文地址:https://www.cnblogs.com/feiling/p/3356110.html