经典字符串计数器设置题目

导文

如何理解程序与计算机硬件的关系?
程序 = 数据结构 + 算法
计算机= 内存 + 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值