day44 数字划分

该博客介绍了一个编程挑战,即如何将1到16的数字分成两组,使得两组数字的和、平方和和立方和都相等。通过使用Python的itertools库来尝试所有可能的组合,最终找到符合条件的一组数字,并输出包含数字1的那一组。这是一个涉及算法和数学问题的编程实例。
摘要由CSDN通过智能技术生成

数字划分

w星球的长老交给小明一个任务:1,2,3...16 这16个数字分为两组。
要求:这两组数字的和相同,并且,两组数字的平方和也相同,并且,两组数字的立方和也相同。
请你利用计算机的强大搜索能力解决这个问题。
并提交1所在的那个分组的所有数字。
这些数字要从小到大排列,两个数字间用一个空格分开。
即类似:1 4 5 8 ...  这样的答案。
注意,只提交这一组数字,不要填写任何多余的内容。

----------------------------------------
笨笨有话说:
    只要一个组的成员确定了,另一个组的成员也就确定了。枚举一个组的成员就可以了。
	凭直觉,两个组的成员数目不会差太多吧。
歪歪有话说:
    既然求 1 所在的那个组,那只要枚举剩余的成员就可以了。
	貌似都是8个成员的可能性很大啊。
from itertools import combinations

lst = [i for i in range(1, 17)]
sum1 = sum(lst)
sum2 = sum([i ** 2 for i in lst])
sum3 = sum([i ** 3 for i in lst])

res = [1]
for possible in combinations(lst[1:], 7):
    if sum(possible) + 1 == sum1 / 2:
        if sum([i ** 2 for i in possible]) + 1 == sum2 / 2:
            if sum([i ** 3 for i in possible]) + 1 == sum3 / 2:
                res.extend(list(possible))
                print(' '.join(map(str, res)))

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Grayson Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值