导文
如何理解程序与计算机硬件的关系?
程序 = 数据结构 + 算法
计算机= 内存 + cpu
CPU负责执行算法,内存负责存储数据结构,因此程序要玩转内存和CPU
题目1
用户出入一个数字
- 判断是几位数
- 打印每一行数字及其重复的次数
- 依次打印每一位数字,顺序个、十、百、千、万..
解法1:传统解法
1.对用户输入数字进行循环
2.对每个数字进行统计
3.每次循环进来对整个序列进行遍历,导致时间复杂度变为O(n**2),即On的平方
#!/bin/python3
#-*- coding: UTF-8 -*-
num = input('your number: ')
lst = list(num)
n = len(num)
print('numher have {} bit'.format(n))
while n:
print(lst[n-1])
n -= 1
n = len(lst)
#根据用户输入的长度进行确定循环次数
for i in num:
#对每个数字遍历整个序列进行统计
cnum = num.count(i)
print('number {} appears {} times'.format(i,cnum))
解法2:计数count
1.对每个数进行count,但是遇到统计过的数字不进行统计
2.先要生成列表进行对数字缓存,缓存至内存之中,方便随时调用
3.此种方法首先要根据用户输入长度进行循环一次,在每次循环过程中还得遍历一次数目,因此时间复杂度为x倍O(n),x为不同数字的个数
#!/bin/python3
#-*- codjng: UTF-8 -*-
num = input("Input number: ")
length = len(num)
print("Number length is {}".format(length))
#生成计数器列表
count = [0]*10
for i in reversed(num):
print(i, end=" ")
print()
for j in reversed(num):
#对用户输入的每个数进行count计算,计算结果放入缓存列表
#对于统计过的数字不再进行二次统计
if not count[int(j)]:
count[int(j)] = num.count(j)
print("Number {} appear {} tjmes".format(j,count[int(j)]))
解法3:一次性计数
1.对每个数进行count,但是遇到统计过的数字不进行统计
2.先要生成列表进行对数字缓存,缓存至内存之中,方便随时调用
3.利用循环和count一次性统计数字出现的频率,每当出现一次,计数器中加1,时间复杂度降低至O(n)
#!/bin/python3
#-*- coding: UTF-8 -*-
num = input("Input number: ")
length = len(num)
lst = [0]*10
#利用计数器统计数字出现的频率
for i in reversed(num):
print(i)
#每当遇到相同的数字计数器加1
lst[int(i)] += 1
else:
print(lst)
题目2
输出5个数字,打印每个数字的位数,将这些数字排序打印,要求升序打印
1.冒泡法python格式封装和解构的写法
2.冒泡法的优化设置flag,标记位的用法,标记位相当于开关是相当好用
!/bin/python3
#-*- coding: UTF-8 -*-
numlst = []
while len(numlst) < 5:
num = input("input your number: ").strip().lstrip('0')
numlst.append(num) if num.isdigit() else print('input number: ')
print(numlst)
length = len(numlst)
for i in range(length):
flag = False
for j in range(length - i - 1):
if numlst[j] > numlst[j+1]:
numlst[j],numlst[j+1] = numlst[j+1],numlst[j]
flag = True
if not flag:
break
print(numlst)