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 !!这说明天天向上的力量不可小觑。所以从每天做起,每天改变一点点,日积月累,就会获得巨大的改变。

原文地址:https://www.cnblogs.com/Y-xp/p/11699439.html

时间: 2024-07-29 20:44:13

python基本算法题(一)的相关文章

07:python常见算法题

1.有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #! /usr/bin/env python # -*- coding: utf-8 -*- #题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? sum=0 for i in range(1,5,1): for j in range(1,5,1): for k in range(1,5,1): if i!=j and i!=k and k!=j : sum=sum+1 print

python实现算法题-汉诺塔

def hnoi(n,a,b,c): if n == 1: print a,c else: hnoi(n-1,a,c,b) print a,c hnoi(n-1,b,a,c) hnoi(3,'a','b','c')

python - 基础算法题 - 用户登录(三次机会)

username = input("输入名字") userword = int(input("输入密码")) i=1 while i<=3: if username = '你好' and userword = 123: print("登录成功") else: print("登录失败") i++ 原文地址:https://www.cnblogs.com/bigbigbird/p/11170922.html

简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现。

简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现. 题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exists in t

python每日经典算法题5(基础题)+1(中难题)

现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级函数的应用.这些题目是在某些刷题的网站上登记的有水平的题目.这里如果有需要input的简单题,就略去了输出结果.如果时间充裕,则就会增加每日更多习题. 一:基础算法题10道 1.判断用户输入的年份是否为闰年 题目解析: (1)问题分析:能被4整除但不能被100整除的年份为普通闰年,能被400整除的年

python每日经典算法题5(基础题)+1(较难题)

一:基础算法题5道 1.阿姆斯特朗数 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数.判断用户输入的数字是否为阿姆斯特朗数. (1)题目分析:这里要先得到该数是多少位的,然后再把每一位的数字截取出来,把各位数字的n次方之和和该数一起判断即可.(2)算法分析:python中有len()函数可以得到一个字符串的长度,因此需要先把一个正整数转化为正整数字符串.然后从高位向低位截取(也可以反过来).或者高效算法利用for循环切片. 从高位到低位:用正整数除了10的n次方,得到的商就

python算法题 python123网站单元四题目

目录 一:二分法求平方根 二:Collatz猜想 三:算24(只考虑满足,不考虑把所有情况找出来) ??下面向大家介绍几个python算法题. 一:二分法求平方根 1.题目要求为 2.输入输出格式为 3.博主解题的思路 ??这道题在c语言中是一道经典的题目,可以用循环,或者递归,在这里我们用python来写.无论是循环还是递归,都是下面的思路: ??二分法就是从中间开始取,把我们每次的结果的变化值(这里是平方)和初始数值对比,然后分别从左右两边截取. ??这里首先设定两个范围定界符low与hig

第一篇博客--记面陌陌科技计算机视觉算法工程师被刷经历(附面试过程中被问倒的一些算法题分析)

求职季,真的会让一个人变得有些不一样吧,比如我,对于一个菜鸟来说,最近一段时间焦虑不安外加有点自闭... 前段时间在校内网上看到了陌陌科技内推计算机视觉算法工程师和机器学习算法工程师的消息,抱着试试的心态整理了一份简历按照提供的邮箱投出去了,我想这次应该又是石沉大海了吧,谁想在一周前闷热的一天在嘈杂的餐厅接到了陌陌科技HR的电话,一周后的周五下午4点在西安的一家咖啡馆参加面试.我问清了时间地点并道谢了HR后并挂了电话继续吃饭. 好吧,这周每天都有各个公司的笔试,外加这周周五上午的组会轮到我做组会

初识面试中的算法题

在面试过程中,常常被要求手撕代码,作者作为测试经理,也经常被手撕代码.手撕代码的内入无非是对字符串.数组.元组.字典进行操作.第一题:取值:1.从字符串及元组中取值str1 = "abcd"stra, strb, strc, strd=str1结果:"a","b","c","d"2.从数组中取值list1 = [a,b,c,d]lista = list1[0],以此类推,中括号中的数字是数组的下标,从0开始