【编程日志】洛谷编程问题--三连击

                                                                       2022/3/11

问题:将 1, 2, \ldots , 91,2,…,9 共 99 个数分成 33 组,分别组成 33 个三位数,且使这 33 个三位数构成 1 : 2 : 31:2:3 的比例,试求出所有满足条件的 33 个三位数。

PYTHON代码段:

#三连击程序:只找第一个数,第一个数最高取到987/3=329
#定义一个判别函数

def take_number(index):
    number1=[]
    number=[]
    
    #定义一个判别三位数是否相同函数
    def judge(i):
        if i%10==(i/10)%10 or i%10==i/100 or (i/10)%10==i/100:
            return 1
   
    #定义一个判别三个数字是否含有相同数字的函数
    def judgejudge(index,i,j,k):
        keynumber=set()
        length=0
     
        #先储存i中数字
        for a in [i,j,k]:
            length+=len(str(a))
            for b in range(0,len(str(a))):
                if int(str(a)[b]) not in index:
                    return 0
                keynumber.add(str(a)[b])
                
        #判定集合中数字数量是否是所有数字数量
        if len(keynumber)==length:
            return 1
        else:
            return 0

    for i in range(123,(100*index[len(index)-1]+10*index[len(index)-2]+index[len(index)-3])//3+1):
        if judge(i):
            continue
        else:
            number1.append(i)
    for j in number1:
        if judge(2*j):#判定两倍和三倍数字本身是否数字重复
            continue
        elif judge(3*j):
            continue
        else:
            if judgejudge(index,j,2*j,3*j):#用judgejudge判定三个数字是否重复
                number.append(j)
    return number

if __name__ == '__main__':
    index=[1,2,3,4,5,6,7,8,9]
    data=take_number(index)
    for i in data:
        print(i,2*i,3*i)

第一次写博客,记录自己写代码的历史哈哈哈,后续可能会优化一下吧

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: NSGA-II(Non-dominated Sorting Genetic Algorithm II)是一种多目标优化算法,主要用于解决多目标优化问题。Python编程语言具有丰富的库和工具,可以用于实现NSGA-II算法。 在Python中,可以使用多种库来实现NSGA-II算法,如DEAP(Distributed Evolutionary Algorithms in Python),PyGMO(Python Parallel Global Multiobjective Optimizer)等。这些库提供了NSGA-II算法的基本实现,包括种群初始化、适应度评估、交叉和变异操作等。 首先,需要定义问题的目标函数和约束条件。NSGA-II算法的目标是找到一解,使得它们相互之间不可比较(也即非支配关系),且在所有可能的解中具有最好的逼近解(也即帕累托最优)。 然后,可以使用Python编程语言编写NSGA-II算法的主要步骤。首先,需要初始化一个种群,用于表示解空间中的各种解。然后,通过计算每个个体的适应度值,根据非支配排序和拥挤度距离进行选择、交叉和变异操作,生成新一代的种群。接下来,对新一代的种群进行非支配排序和拥挤度距离计算,重复上述步骤,直到达到指定的停止条件。 最后,根据NSGA-II算法生成的帕累托前沿,可以选择最优解或从前沿中进行进一步的决策。 在Python中,可以使用matplotlib等可视化库将生成的帕累托前沿图形化展示,以便更好地理解问题的解集。 总之,通过使用Python编程语言实现NSGA-II算法,可以有效解决多目标优化问题,并生成最优帕累托解集。 ### 回答2: NSGA-II(多目标遗传算法非支配排序遗传算法)是一种常用于解决多目标优化问题的算法。Python编程语言提供了丰富的库和工具,可以方便地实现NSGA-II算法。 以下是使用Python编程解决NSGA-II问题的步骤: 1. 定义目标函数和约束条件:首先需要定义具体的目标函数和约束条件。这些函数可以是任意的,根据实际问题来设计。目标函数是待优化的目标,约束条件是问题的限制条件。 2. 初始化种群:通过随机生成一定数量的个体,形成初始种群。每个个体由一变量组成,变量的取值根据问题的要求来确定。 3. 评估适应度:对于每个个体,根据目标函数和约束条件计算其适应度值。适应度值越高表示个体越优秀。 4. 进行遗传操作:根据NSGA-II算法的基本原理,通过选择、交叉和变异操作对种群进行进化。选择操作基于非支配排序和拥挤度距离,用于选择出较优的个体。交叉和变异操作用于生成新的个体,增加种群的多样性。 5. 更新种群:根据遗传操作得到的新个体,更新原有的种群。 6. 判断终止条件:判断是否满足终止条件,如达到预设的迭代次数或满足特定的停止准则。如果满足条件,则停止优化过程,输出最终的非支配解集。 7. 输出结果:将最终得到的非支配解集进行输出,并根据实际需求进行进一步分析或应用。 通过使用Python编程语言,可以使用相关的库,如DEAP(分布式进化算法框架)等来实现NSGA-II算法。从定义目标函数和约束条件到遗传操作的实现,Python提供了丰富的函数和工具,使得解决NSGA-II问题变得更加简单和高效。 ### 回答3: NSGA-II是一种多目标优化算法,在解决复杂的多目标问题上具有较高的效率和准确性。Python编程语言提供了丰富的工具和库,可以很方便地实现NSGA-II算法。 首先,在Python中可以使用numpy库来进行矩阵和数的操作,这是NSGA-II算法中经常使用的工具。另外,还可以使用matplotlib库进行结果的可视化展示。 接下来,需要定义适应度函数来评估每一个个体的适应度。适应度函数根据问题的具体要求而定,可以使用一些已有的评估方法,也可以根据个人需求自定义适应度计算方法。 然后,要进行种群初始化,即生成一具有随机特征的个体。可以使用numpy库中的随机函数来生成符合特定分布的随机数。 在遗传算法的进化过程中,需要进行选择、交叉和变异操作。在Python中,可以使用遗传算法库(例如deap、pyevolve等)来实现这些操作,简化编程过程。 在使用遗传算法库进行操作时,需要定义个体的基因表示方法和相应的变异、交叉操作方法。这些操作方法可以根据问题的特点来设计,例如单点交叉、多点变异等。 最后,可以使用NSGA-II的主要步骤进行迭代优化,包括使用非支配排序获取帕累托前沿、计算拥挤度距离、选择优秀个体等。通过多次迭代,可以得到最优的解集。 总而言之,Python编程语言具有丰富的工具和库,可以很方便地实现NSGA-II算法。通过定义适应度函数、初始化种群、选择、交叉和变异操作,最终可以得到优化结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

崽崽栽在代码上

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

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

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

打赏作者

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

抵扣说明:

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

余额充值