一:基础算法题5道

1.阿姆斯特朗数

如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。判断用户输入的数字是否为阿姆斯特朗数。

(1)题目分析:这里要先得到该数是多少位的,然后再把每一位的数字截取出来,把各位数字的n次方之和和该数一起判断即可。
(2)算法分析:python中有len()函数可以得到一个字符串的长度,因此需要先把一个正整数转化为正整数字符串。然后从高位向低位截取(也可以反过来)。或者高效算法利用for循环切片。

从高位到低位:用正整数除了10的n次方,得到的商就是高位的数,余数就是下次循环的数。

从低位到高位:用正整数除以10,得到的余数就是低位的数,商就是下次循环的数。

for循环:用for循环依次得到每一位数。就是可迭代对象依次显示。

(3)用到的python语法:while循环,for循环,if语句,函数。

(4)博主答题代码:

从高位到低位:

def judge(num):mysum = 0n = len(str(num)) - 1m = n + 1firstNum = numwhile num > 0:quotient = num //  (10**n)remainder = num % (10**n)mysum += quotient ** mnum = remaindern -= 1if mysum == firstNum:print('该数是阿姆斯特朗数')else:print('该数不是阿姆斯特朗数')num = int(input('请输入一个整数:'))
judge(num)

从低位到高位:

def judge(num):mysum = 0n = len(str(num)) - 1m = n + 1firstNum = numwhile num > 0:quotient = num // 10remainder = num % 10mysum += remainder ** mnum = quotientn -= 1if mysum == firstNum:print('该数是阿姆斯特朗数')else:print('该数不是阿姆斯特朗数')num = int(input('请输入一个整数:'))
judge(num)

(5)高效方法:

for循环:

def judge(num):n = len(num)sum = 0for i in num:sum += int(i) ** nif sum == int(num):print('该数是阿姆斯特朗数')else:print('该数不是阿姆斯特朗数')num = input('请输入一个整数:')
judge(num)

2.整数数组

给定一个整数数组,判断是否存在重复元素。

(1)题目分析:利用list的内置函数count计算每一个元素的数量,时间会很多,内置函数list.count(i)时间复杂度为O(n) 外面嵌套一层循环,总的时间为O(n^2),不是一个高效算法。

可以排序后对相邻元素判断是否相等。还有一个方法是利用set()特性进行判断。

(2)算法分析:根据上面的题目分析用高效一点的算法展示。
(3)用到的python语法:
(4)博主答题代码:

def judgeInt(num):this_set = set(num)if len(this_set) == len(num):print('没有重复')else:print('有重复')my_num = input('请输入一个整数:')
judgeInt(my_num)

3.回文数

判断一个整数是否是回文数。

(1)题目分析:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

(2)算法分析:可以利用python的切片很方便地解决该问题,但是如果是其它语言的话,没有切片。因此需要考虑普遍的方法。

算法分析如下:

可以看到,我们根据两种不同情况分析,即可得结果。

(3)用到的python语法:if判断语句,切片,函数。
(4)博主答题代码:

def judge(x):this_str = str(x)if len(this_str) % 2 != 0:    mid = int((len(this_str) + 1 ) / 2 - 1)left = mid - 1right = midif this_str[0:left+1] == this_str[-1:right:-1]:return Trueelse:return Falseif len(this_str) % 2 == 0:mid = int(len(this_str)/2) - 1if this_str[0:mid+1] == this_str[-1:mid:-1]:return Trueelse:return Falsenum = input('请输入一个整数:')
if judge(num):print('{0}是回文数'.format(num))
else:print('{0}不是回文数'.format(num))

(5)高效方法:

def judge(x):return str(x) == str(x)[::-1]num = input('请输入一个整数:')
if judge(num):print('{0}是回文数'.format(num))
else:print('{0}不是回文数'.format(num))

只需要一行代码即可以判断,这就是切片的好处。

是不是很简单呢。

4.回文数进阶算法,不限转化为字符串

那有没有什么不需要先转化为字符串的方法呢?也是有的。可以利用前面的阿姆斯特朗数从高位到低位和从低位到高位获取两个列表或者字典进行比较,这里就不分析了,直接上代码:

def judge(num1):if '-' in str(num1):return Falseif num1 >= 0 and num1 < 10 :return Truelist1 = [];list2 = []num2 = num1n1 = len(str(num1)) - 1n2 = len(str(num2)) - 1while num1 > 0:quotient1 = num1 //  (10**n1)remainder1 = num1 % (10**n1)list1.append(quotient1)num1 = remainder1n1 -= 1while num2 > 0:quotient2 = num2 // 10remainder2 = num2 % 10list2.append(remainder2)num2 = quotient2n2 -= 1num = 0for i in range(0,len(list1)):if list2[i] == list1[i]:num += 1if num == len(list1):return Trueelse:return Falsenum = int(input('请输入一个整数:'))
if judge(num):print('{0}是回文数'.format(num))
else:print('{0}不是回文数'.format(num))

效率确实很低。

5.插入排序

对于未排序数组,在已排序序列中从前向后或从后向前扫描,找到相应位置并插入。

(1)题目分析:这是个简单的算法,只需要把要每个元素依次和相邻的元素比较即可。

(2)算法分析:想用一个变量标记遍历到的元素,然后,有两种方法。

从后先前,把该元素和左边的元素进行对比,如果比左边的元素小,就互换,当左边的元素的编号为-1时停止。

从前先后,把该元素和右边的元素进行对比,如果比右边的元素大,就互换,当右边的元素的编号为数组的长度减1时停止。

(3)用到的python语法:while循环,函数,数据交换。

(4)博主答题代码:

def insert(arr):    for i in range(1,len(arr)):j = iwhile j > 0:if arr[j] < arr[j-1]:arr[j-1],arr[j] = arr[j],arr[j-1]j -= 1        my_arr = list(map(int,input('请输入数组:').split(',')))
insert(my_arr)
print(my_arr)

(5)高效代码

用python的列表排序函数sort()可以很方便进行排序。

二:较难算法题1道

这些等到下一篇博客会详细讲解。

1.串联所有单词的字串

给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。

注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。

2.解数独

编写一个程序,通过已填充的空格来解决数独问题。

空白格用 '.' 表示。

较难算法题等到之后博客会详细讲解。

转载于:https://www.cnblogs.com/ITXiaoAng/p/11517982.html

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

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

    现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级 ...

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

    现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级 ...

  3. 每日经典算法题(十六) 九九乘法表

    每日经典算法题(十六) 九九乘法表 九九乘法表:Multiplication Table 99 题目 输出 9 * 9 口诀 程序分析 分行与列考虑,共9行9列,i 控制行,j 控制列 思路 非常经典 ...

  4. 每日经典算法题(十三) 逆推算法(平方根相关)

    每日经典算法题(十三) 逆推算法(平方根相关) 平方根:Square Root 题目 有一个整数,它加上 100 后是一个 完全平方数 ,再加上 168 又是一个 完全平方数 ,请问该数是多少? 程序 ...

  5. 每日经典算法题(四) 分解质因数

    每日经典算法题(四) 分解质因数 分解质因数:Decomposition Quality Factor 题目 将一个正整数分解质因数.例如:输入 90,打印出:90 = 2 * 3 * 3 * 5 程 ...

  6. C语言经典算法100道实战题

    [C语言经典算法100道实战题]适合具备C语言基础语法的同学学习,提高编写程序的逻辑思维能力和算法设计能力专门精心设计.100个经典的算法供大家练习及配套对应的录播视频.为我们今后学习其它的编程语言和 ...

  7. php算法在线刷题,c,算法_每日一道算法:leetcode 刷题碰到的问题。,c,算法 - phpStudy...

    每日一道算法:leetcode 刷题碰到的问题. 这是题目: Given an unsorted array nums, reorder it such that nums[0] < nums[ ...

  8. java经典问题算法大全_10道java经典算法!每一题都能提升你的java能力!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 10道java经典算法! [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位. ...

  9. 要用计算机才能算的题,计算机基础题精选,要考90分以上的同学进考场前必看 -电脑资料...

    一.单选题练习 3.用一个字节最多能编出( D )不同的码, A. 8个                B. 16个          C. 128个           D. 256个 7.RAM代 ...

最新文章

  1. 作业函数的定义与调用
  2. python操作word文档(python-docx)
  3. ASP.NET MVC3细嚼慢咽---(2)模板页
  4. python 使用 os的 popen(‘命令’) 如果命令行输出中 有中文乱码, 提示 'gbk' 无法解析的错误 解决办法
  5. 安卓如何修改华强北二代耳机敲击指令?
  6. BugkuCTF-MISC题可爱的故事
  7. 【LeetCode】剑指 Offer 32 - III. 从上到下打印二叉树 III
  8. 【电商AI】商业情境中的机器学习|湾区人工智能
  9. C++ double转CStringW/LPCWSTR
  10. Flash Builder4.6 入门Demo_trace
  11. Oracle,Mysql,Sqlserver数据库连接串(总爱忘,留着备用)
  12. 前端自动化构建工具gulp的使用介绍
  13. Map转JSON内容解释
  14. 14款CSS3图片层叠切换动画
  15. 知了课堂python_Python框架Flask系列课程(2)—全栈开发[知了课堂]
  16. Qt是什么?Qt简介(非常全面)
  17. Cobar分布式关系数据库访问代理
  18. springboot安全之整合spring security
  19. tensor和numpy中的乘法运算,如torch.mul()和torch.sum()函数的用法
  20. zeek(bro) 脚本学习 一

热门文章

  1. 一些常用的场景进行描述分析(权限管理、6个典型场景)
  2. Omi v1.0震撼发布 - 令人窒息的Web组件化框架
  3. Oracle 10g 关于控制文件的等待事件
  4. rocketmq namesrv 第一章启动过程
  5. php获取当前域名、主机、URL、端口、参数、网址、路径、代理等
  6. struts1基础入门
  7. 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jinjazz/archive/2009/04/29/4138000.aspx...
  8. C-free在编写代码的过程中遇到方向键失灵,回车键失灵,换行失灵,但是可以正常输入的解决办法!!!!!
  9. python调用jar包的模块_使用 Python 的 JPype 模块调用 Jar 包
  10. 实时音视频直播带货中影响用户体验的Bug根因