zoukankan      html  css  js  c++  java
  • python基本算法题(一)

    1、3位水仙花数计算

    "3位水仙花数”是指一个三位整数,其各位数字的3次方和等于该数本身。

    例如:

    ABC是一个“3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。

    使用Python,输出所有的3位水仙花数。

    >>> for i in range(100,1000):
        if pow(i // 100 , 3) + pow(i % 10 , 3) + pow(i // 10 % 10, 3) == i:
               print(i,end=" ") 

     >>> 153 370 371 407
         Process finished with exit code 0

    水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。与水仙花数类似

    同样的,与水仙花数相似,回文数的判断方法也是采取相应的方式

    2、回文数的判断

    “回文”是指正读反读都能读通的句子。在数学中也有这样一类数字有这样的特征,称为回文数,例如121,25852等等

    n=input("请输入一个数字:")
    if n == n[::-1]:
        print("你输入的数字是回文数")
    else:
        print("你输入的数字不是回文数")

    这里是根据回文数的特性:回文数和本身颠倒的数相等,来进行判断的

    3、使用Python判断是否为闰年

    判断任意年份是否为闰年,需要满足以下条件中的任意一个:
      ① 该年份能被 4 整除同时不能被 100 整除;
      ② 该年份能被400整除。

    由于满足闰年的条件互相有关联,所以可以使用条件语句来实现,判断输入的年份是否为闰年

    def leap(a):
        if a % 4 == 0:
            if a % 400 == 0:
                return True
            elif a % 100 == 0:
                return False
            else:
                return True
        else:
            return False
    
    
    n = int(input())
    if leap(n) == True:
        print("{}年是闰年".format(n))
    else:
        print("{}年不是闰年".format(n))

    4、快乐的数字

    首先是一个快乐的数字的定义:

    快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。能够最终收敛等于1的数就是快乐的数字。使用Python编写一个算法来确定一个数字是否“快乐”

    例如数字 19 就是一个快乐的数字,计算过程如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

      12 + 92 = 82

      82 + 22 = 68

      62 + 82 = 100

      12 + 02 + 02 = 1   (最终收敛为1)

    这里经过了分析,得出了,当循环到数字4时,那么这个数字一定不是快乐数,所以可以得出条件。设置一个循环,当循环到1(快乐数)或者4(不是快乐数)时,就终止循环,得出结果是否为快乐数

    def getSumofSquares(num): #快乐数判断
        numStr=str(num)
        sum=0
        for i in numStr:
            sum += int(i)**2
        return sum
    
    
    n = input() 
    sumofSqrs = eval(n)
    while sumofSqrs != 1 and sumofSqrs != 4: 
        sumofSqrs = getSumofSquares(sumofSqrs)
    else:
        if sumofSqrs == 1:
            print("True")
        else:
            print("False")

    5、括号配对检测

    用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确(本题仅限于小括号)

    def match_parentheses(s):
        # 把一个list当做栈使用
        ls = []
        parentheses = "()"
        for i in range(len(s)):
            si = s[i]
            # 如果不是括号则继续
            if parentheses.find(si) == -1:
                continue
            # 左括号入栈
            if si == '(':
                ls.append(si)
                continue
            if len(ls) == 0:
                return False
            # 出栈比较是否匹配
            p = ls.pop()
            if p == '(' and si == ')':
                continue
            else:
                return False
    
        if len(ls) > 0:
            return False
        return True
    
    n=input()
    result = match_parentheses(n)
    if result==True:
        print("配对成功")
    else:
        print("配对不成功")

    这里是使用list来代替栈的作用,来完成括号匹配的功能

    括号匹配问题(所有的括号)算法:

    首先设置两个列表分别存放的是各种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况:

      1.字符串 首字符 出现在闭括号列表中,直接结束,输出错误
      2.字符串长度不为偶数,直接结束,输出错误
      3.对原始字符串列表化去重,如果去重后的列表长度不为偶数直接结束,输出错误
      4.遍历字符串,将属于开括号集合的括号加入到列表中,当遇上一个闭括号的时候计算该闭括号在闭括号列表中的索引与

    当前列表最后一个开括号在开括号列表中的索引是否一致,一致则继续,否则直接结束,输出错误

    def bracket_mathch(one_str):
        tmp_list = []
        open_bracket_list = ['(', '[', '{', '<', '']
        close_bracket_list = [')', ']', '}', '>', '']
        one_str_list = list(one_str)
        length = len(one_str_list)
        set_list = list(set(one_str_list))
        num_list = [one_str_list.count(one) for one in set_list]
        if one_str[0] in close_bracket_list:
            return False
        elif length % 2 != 0:
            return False
        elif len(set_list) % 2 != 0:
            return False
        else:
            for i in range(length):
                if one_str[i] in open_bracket_list:
                    tmp_list.append(one_str[i])
                elif one_str[i] in close_bracket_list:
                    if close_bracket_list.index(one_str[i]) == open_bracket_list.index(tmp_list[-1]):
                        tmp_list.pop()
                    else:
                        return False
                        break
        return True
    
    
    
    one_str_list = ['({}', '({[<>]})', '[(){}', '{{{{{', '([{})', '}{[)]']
    for one_str in one_str_list:
        if bracket_mathch(one_str):
            print(one_str, '括号匹配正确')
        else:
            print(one_str, '括号匹配错误')

    注:这里仅支持输入纯括号,并对其进行括号匹配判断,没有实现括号+字符串的括号匹配

    6、天天向上的力量

     一年365天,以第一天的能力为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时能力值相比前一天下降1‰。

    每天努力和每天放任,一年下来的能力值相差多少呢?

    import math
    dayup = math.pow((1.0+0.001),365)     #每天提高
    daydown = math.pow((1.0-0.001),365)     #每天下降
    print("每天提高:{:.2f},每天懈怠:{:.2f}".format(dayup,daydown))
    >>> 每天提高:1.44,每天懈怠:0.69

    这是很基础的一个调用math库函数的题,然后使用格式化输出。

    可以看出,经过1年的时间,每天提高一点点竟然达到了 1.69 !!这说明天天向上的力量不可小觑。所以从每天做起,每天改变一点点,日积月累,就会获得巨大的改变。

  • 相关阅读:
    九月三十学习报告
    九月二十九学习报告
    九月二十八学习报告
    九月二十七学习报告
    九月二十五学习报告
    九月二十四学习报告
    九月二十三学习报告
    九月二十二学习报告
    九月二十学习报告
    网络协议中HTTP,TCP,UDP,Socket,WebSocket的优缺点/区别
  • 原文地址:https://www.cnblogs.com/Y-xp/p/11699439.html
Copyright © 2011-2022 走看看