- List item 1-1统计数字问题
问题描述 :一本书的页码从自然数1开始顺序编码直到自然数n。书的页码按照通常的习
惯编排,每个页码都不含多余的前导数字0。例如,第6页用数字6表示而不是06或006等。
数字计数问题要求对给定书的总页码n,计算书的全部页码分别用到多少次数字0,1,2,…,9。
算法设计:给定表示书的总页码的十进制整数 n(1≤n≤10^9),计算书的全部页码中分
别用到多少次数字 0,1,2,…,9。
数据输入:输入数据由文件名为 imput.txt 的文本文件提供。每个文件只有1行,给出表
示书的总页码的整数n。
结果输出:将计算结果输出到文件 output.txt。输出文件共10行,在第k行(k=1,2…,10)
行输出页码中用到数字 k-1的次数。
暴力解决
import os
#建立统计页码出现数字次数的列表
def creat_list():
page_list = []
for i in range(10):
page_list.append(0)
return page_list
#逐个遍历所有的页码对其所用到的数字累加到数字列表中
def statistic_pagenumber(n):
num_list = creat_list()
for i in range(1, n+1):
while(i):
num_list[int(i % 10)] += 1
i //= 10
return num_list
if __name__ == '__main__':
if os.path.exists('/Users/ouyangcan/Desktop/input.txt') == True:
f = open('/Users/ouyangcan/Desktop/input.txt', 'r', encoding='utf-8')
num = int(f.read())
page_numbers_sum = statistic_pagenumber(num)
f.close()
else:
print('文件路径有误!')
#此处需要加上encoding='',不然无法打开
f = open('/Users/ouyangcan/Desktop/output.txt', 'w', encoding='utf-8')
for i in range(10):
#python中换行为反斜杠\,\r为转义符
f.write(str(page_numbers_sum[i])+'\r\n')
#关闭窗口
f.close()