• Python练习(二) 4位数四则运算


    题目:在一个数的各个数字之间插入四则运算的运算符组成算式,
    然后计算算式的结果(某些数位之间可以没有运算符,但整个表达式中最少要插入 1 个运算符)。
    例如:
    1234 -> 1+2×3-4 = 3
    9876 -> 9×87+6 = 789
    假设这里的条件是,组合算式的计算结果为“将原数字各个数位上的数逆序排列得到的数”,
    并且算式的运算按照四则运算的顺序进行(先乘除,后加减)。
    那么位于 100~999,符合条件的有以下几种情况。
    351 -> 3×51 = 153
    621 -> 6×21 = 126
    886 -> 8×86 = 688
    求:位于 1000~9999,满足上述条件的数。(出处:程序员的算法趣题)

    直接上代码:欢迎交流,本人能力有限,有更快算法请分享。

    """***********************************"""
    import numpy as np
    import datetime
    
    def cal_fit_num(num):
        numstr=str(num)
        numstr_len=len(numstr)
        if numstr_len!=4:
            return "None"
        """需要的结果,有点特别的是,运算符只能是乘法连接才有机会满足题目要求"""
        
        numinv=int(numstr[::-1])
        numstr=list(str(num))
        """第一种情况;插入3个运算符"""    
        resultnum1=int(numstr[0])*int(numstr[1])*int(numstr[2])*int(numstr[3])
        if(numinv==resultnum1):
            return num
        """第二种情况;插入2个运算符"""
        
        resultnum21=int(numstr[0]+numstr[1])*int(numstr[2])*int(numstr[3])
        if(numinv==resultnum21):
            return num
        resultnum22=int(numstr[0])*int(numstr[1]+numstr[2])*int(numstr[3])
        if(numinv==resultnum22):
            return num
        resultnum23=int(numstr[0])*int(numstr[1])*int(numstr[2]+numstr[3])
        if(numinv==resultnum23):
            return num
        """第三种情况;插入1个运算符"""
        resultnum31=int(numstr[0]+numstr[1]+numstr[2])*int(numstr[3])
        if(numinv==resultnum31):
            return num
        resultnum32=int(numstr[3])*int((numstr[1]+numstr[2]+numstr[3]))
        if(numinv==resultnum32):
            return num
        return "None"
    
    print("******************************************")      
    start = datetime.datetime.now()  
    num=1000  
    allnum=[]       
    while(num!=10000):
        rvalue= cal_fit_num(num)
        if(rvalue!="None"):
             allnum.append(rvalue)      
        num=num+1
          
    end=datetime.datetime.now()      
    spendtime=end-start
    print("find allnum is:") 
    print(allnum)           
    print("find  allnum in [1000,9999] Spend time:{}".format(spendtime))  
    View Code

    结果如下:

     

  • 相关阅读:
    werfault进程使用CPU率高
    oracel 拆分字符串
    TCP TIME WAIT
    netstat 命令
    Java 理论与实践: 并发集合类
    DIV与SPAN之间有什么区别
    oracle超出打开游标的最大数的原因和解决方案
    Quartz表达式
    Axis创建webservice客户端和服务端
    Web服务cxf框架发布2
  • 原文地址:https://www.cnblogs.com/banluqiaodaima/p/15603482.html
Copyright © 2020-2023  润新知