python实现连环阵

题目描述

杰洛特主动出击狂猎的老巢,然而在此之前,他遇到了一个女术士,杰洛特想要女术士助自己一臂之力,她却出了一个难题给杰洛特,只有答对了才能与他同行。 女术士给杰洛特一个四位数的素数,要求他说出这个四位数的数字的另外两个四位素数(从小到达输出)满足下面条件。

要求

  1. 另外两种组合的四位数也必须是素数
  2. 这三个四位数构成等差数列
  3. 如果没有符合条件的组合, 则返回no

样例输入

4817
1232

样例输出

1487 4817 8147
no

from itertools import permutations   # 这个模块用来全排列列表


def judge_particle(num):
    """
    判断数字是否为素数
    :return: 布尔值(为素数返回True)
    """
    is_true = True
    if num == 0 or num == 1:
        is_true = False
    for i in range(2, num):
        if num % i == 0:
            is_true = False
    return is_true


class interlink:   # 连环阵类

    def __init__(self, num):
        self.num = num
        self.list = []

    def arrange(self):
        """
        对四位数进行全排列,给出所有可能
        :return:无
        """
        temp = self.num
        self.list = list(num for num in list(str(temp)))
        self.list = list(permutations(self.list))
        self.list = list(int("".join(i)) for i in self.list)
        self.list = list(num for num in self.list if num > 1000)
        k = 0
        for i in range(len(self.list)):
            if not judge_particle(self.list[i - k]):
                self.list.remove(self.list[i - k])
                k += 1

    def find_result(self):
        """
        找到全排列后的全部素数
        :return: 无
        """
        temp = []
        for i in range(len(self.list)):
            for j in range(len(self.list)):
                if (self.num - self.list[i] == self.list[j] - self.num or self.list[i] - self.num == self.list[j] - self.list[i] or self.list[j] - self.list[i] == self.num - self.list[j]) and self.list[i] != self.list[j]:
                    temp.append(self.list[i])
                    temp.append(self.list[j])
                    temp.append(self.num)
                    temp.sort()
                    print("{} {} {}".format(temp[0], temp[1], temp[2]))
                    return
        print("No")


if __name__ == '__main__':     # 程序开关
    end = ""
    while end != "y" and end != "Y":
        while True:
            try:
                use_input = int(input("请输入一个四位素数:"))
                if 1000 <= use_input <= 9999:
                    if judge_particle(use_input):
                        break
                    else:
                        print("输入的四位整数必须为素数,{}不是素数!".format(use_input))
                        print("No")
                        continue
                else:
                    print("输入的必须为四位整数且为素数!")
                    continue
            except ValueError:
                print("输入的必须为整数(4位)且为素数!")
        num = interlink(use_input)   # 
        num.arrange()    # 全排列
        num.find_result()     # 打印结果
        end = input("是否退出(y/n)")

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值