棋子颜色的变化题目记录

在网上看到一道题

首先我们可以随便手写(或者编程)看看最后结果可能是什么,结果发现最后全部都是黑子,不妨猜想,会不会无论起始状态如何,都会有相同的结果。

一看到就想要暴力枚举了,由题目,一共有8个棋子,每一个都只有黑白两种,那么就可以把它们设成零和一,然后用二进制转换把从1到128(2^8)的所有数转化为二进制,再补齐为八位,就可以不重不漏地找出所有可能。

def spiltbin(a):
    bin_num = '{0:b}'.format(a)#把a转化为二进制数
    complete_num = bin_num.zfill(8)#补齐为八位
    spilt_num = []#分成一个列表 给下面用
    for i in complete_num:
           spilt_num.append(i)
    return spilt_num

然后用递归的方法,看看能不能跑出来,其实这里有一个问题,如果递归结果跑不出来怎么办,作者亲测,会溢出的。

#黑子设为一
#白子设为0
def conduct(numlist,n):
    new_numlist = []
    if numlist == ['1', '1', '1', '1', '1', '1', '1', '1']:
        print(True)#递归结束条件
        return numlist
    for i in range(0, 7):#一个指针
        j = i + 1#相邻比较
        if numlist[i] == numlist[j]:
            new_numlist.append('1')
        elif numlist[i] != numlist[j]:
            new_numlist.append('0')
    if numlist[0] == numlist[7]:#头尾比较
        new_numlist.append('1')
    elif numlist[0] != numlist[7]:
        new_numlist.append('0')        
    conduct(new_numlist,n)#递归

然后再用for跑128趟就好了,结果确实是全部都是黑子

但是,这样太蠢了

看书上给了一种数学直接证明的方法:

因为有黑+白=白      白+黑=白

        黑+黑=黑        白+白=黑

即棋子同黑异白,这不就和正负数乘法同正异负同构吗?(不严谨)

不妨设黑为+1,白为-1,而求出他们之间的数的推演过程则用乘法表示

最后直接来一个杨辉三角,中间的幂次全部都是偶数,所以一定为正,左右相等,同正,所以结果一定为正,顺便还证明了最多不超过8步。

所以最后一定为全部黑。

还是人脑比较好用啊!! 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值