zoukankan      html  css  js  c++  java
  • 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

    结果如下:

     

  • 相关阅读:
    正则表达式的各种验证方法
    SQL SERVER常用函数
    Eclipse快捷键 10个最有用的快捷键
    jquery中选择器input:hidden和input[type=hidden]的差别
    JQuery 对 Select option 的操作
    非常好用的游戏数据保存类:ScriptableObject
    时间戳转换
    关于手机设备网络类型的判断
    compareTo的使用(实现排序功能)
    AR_Demon(使用vuforia平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)
  • 原文地址:https://www.cnblogs.com/banluqiaodaima/p/15603482.html
Copyright © 2011-2022 走看看