算法设计问题(Python)

  • 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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值