给大学生难倒的小学生趣味乐园———从编程的角度思考

2021-09-27  本文已影响0人  小小杨树
image.png

题目如上:

请你用1,3,4,5,6,8,9这7个数字把下列汉子替换下来

----西游记
X ------- 记


大家都爱看

从这要求来分析有如下特征:
1.要求将所有的数字都要用到
2.所有的数字和汉字对应起来,且不能重复

单纯的从数学角度分析较为容易,我门可以从计算机思维上考虑:
1.生成list[1,3,4,5,6,8,9]的三位数排列组合
2.原list的数字位结果的排列组合
3.结果必定是四位数,把三位数的剔除
4.三位数的个位数乘以该三位数,得到的结果需要再“2”种

from itertools import permutations

def begin():
    s = set()
    for i in permutations([1, 3, 4, 5, 6, 8, 9], 3):
        k = ''
        for j in range(0, len(i)):
            k = k + str(i[j])
        s.add(int(k))
    for chengshu in s:
        # print('=====')
        listBegin = [1, 3, 4, 5, 6, 8, 9]
        # chengshu = 986
        gewei = chengshu%10;
        result = chengshu * gewei;
        list1 = getList(chengshu)
        list2 = getList(result)
        # print(list1,list2)
        set1 = set(list1)
        set2 = set(list2)
        setBegin = set(listBegin)
        resultSet = set1.union(set2)
        if len(resultSet) == 7:
            print('=========')
            if setBegin.issubset(resultSet) and resultSet.issubset(setBegin):
                print('xxxxxxxx')
                print(chengshu)
                print(result)
                return


def getList(num):
    data1 = int(num%10);
    data2 = (num // 10)%10;
    data3 = (num //100)%10;
    if num//100>=10:
        data4 = (num//1000)%10
        return [data4,data3,data2,data1]
    return [data3,data2,data1]


if __name__ == '__main__':
    begin()

结果展示:

E:\miniconda\python.exe C:/Users/kiven/Desktop/test/gg_new.py
=========
=========
=========
=========
=========
=========
=========
=========
=========
=========
xxxxxxxx
954
3816

很容易可以看出来,西游记三个字分别对应的是954,大家都爱看对应的是3816

大家可以尝试更改这七位数,看看结果又是多少呢?
我这里更改了一下:

[2, 3, 4, 5, 7, 8, 9]
其结果位:
547
3829
上一篇 下一篇

猜你喜欢

热点阅读