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 !!这说明天天向上的力量不可小觑。所以从每天做起,每天改变一点点,日积月累,就会获得巨大的改变。
python基本算法题(一)的更多相关文章
- python在算法题中判断输入结束(EOF)
有些算法题是这样要求的,一行输入一行数据,然后没有规定我要输入多少行,你要自行判断文件结束EOF,否则是会runtime error的,因为oj内部都是用文件来进行读写的. 例如a+b,每一行输入a ...
- python经典算法题:Z字变形
题目 直接看图! 思路第一步:分组 我们把传入的字符串进行分组, 每个框内的字母为1组: 我们发现每个相同颜色的框内的一组字母的特点是在传入的字符串中是连续的: 我们还发现每组字母的个数是由numRo ...
- python经典算法题:求字符串中最长的回文子串
题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...
- 用Python写算法题--洛谷P1149 火柴棒等式
题目 题目来源 P1149 火柴棒等式,https://www.luogu.org/problem/P1149 题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式? ...
- python:面试算法题
''' 1.买卖股票的最佳时机给定一个数组,它的第?i?个元素是一支给定股票第?i?天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不 ...
- python常用算法题
一: #计算平均数,中位数和众数 #coding:utf-8 #计算平均数,中位数和众数 import random lst = [random.randint(0,10) for i in rang ...
- python经典算法题:无重复字符的最长子串
题目:无重复字符的最长子串. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子 ...
- 简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现。
简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现. 题目: Suppose a sorted array is rotated at som ...
- python算法题
python几道简单的算法题 最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都 ...
随机推荐
- Ubuntu下安装和配置Apache2,小编觉得挺不错的,现在就分享给大家
本篇文章主要介绍了详解Ubuntu下安装和配置Apache2,小编觉得挺不错的,现在就分享给大家,也给大家做个参考.有兴趣的朋友可以了解一下.(http://xz.8682222.com) 在Ubun ...
- 等差数列+随机数——cf1114E
先确定上界 然后用查询随机位置的数,求gcd作为公差即可 /* 给定一个size为n的打乱的等差数列 两个询问 ? i 询问第i个数的值 > x 询问大于的值是否存在 可以在30次内问出最大值 ...
- Ubuntu下使用SSH 命令用于登录远程桌面
https://blog.csdn.net/yucicheung/article/details/79427578 问题描述 做DL的经常需要在一台电脑(本地主机)上写代码,另一台电脑(服务器,计算力 ...
- duilib教程之duilib入门简明教程5.自绘标题栏
如果大家有做过标题栏的自绘,肯定会感慨各种不容易,并且现有的一些资料虽然完美的实现了功能,但是代码比较乱,需要自行整理.如果用duilib,就是小case啦. duilib其实并没有区分标题栏和 ...
- js 面向对象几种数据模式
一.单例模式: 把描述同一事物的属性和方法放在同一内存空间下,实现了分组的作用,防止同一属性或者方法冲突.我们把这种分组编写代码的模式叫做单例模式即普通的对象. 单例模式是项目开发中最常用的一种开发模 ...
- PAT甲级——A1095 Cars on Campus
Zhejiang University has 8 campuses and a lot of gates. From each gate we can collect the in/out time ...
- day70test
day_70: #api / urls: from django.conf.urls import url from . import views urlpatterns = [ url(r'^car ...
- <每日一题>题目26:选择排序(冒泡排序改进版)
''' 选择排序:选择最小的,以此类推 ''' import random import cProfile def select_Sort(nums): for i in range(len(nums ...
- python的functools.partial的应用
functools.partial是类似于创造“可移动”函数的意思,参数的第一个是函数名,其他的是这个函数其他参数,例如: generator_func = functools.partial( tf ...
- Sublime Text3添加到右键快捷菜单教程(亲测可用)
前言: 安装Sublime Text3时,未选择右键快捷方式,可以通过下面的方式解决! 教程: 方法一: 新建sublime_addright.reg文件 编辑后双击打开就OK 注意:括号内是subl ...