(题目来自:计算机算法设计与分析 王晓东 编著)
一本书的页码从自然数1开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如第6页用6表示而不是06或006。数字统计问题要求对给定书的总页码,计算出书的全部页码中分别用到多少次数字0,1,2,3,.....9。
数据输入:输入数据由数据名为input.txt的文件提供,文件只有1行,给出书的总页数n
数据输出:将计算结果输出到文件output.txt中,输出文件共有10行,在第k(k=1,2,...10)行输出页码中用到的数字k-1的次数。
小白没学过C++,也没get到算法的精髓,就简单粗暴的用python提供以下思路吧。
# 统计总页码中,每个数字出现的次数
record = {} # 用于记录每个数字出现的次数
all_num = [] # 用于记录所有出现的数字
with open('input.txt','r') as file:
in_page = int(file.read());
print(in_page);
#in_page = int(input("请输入总页码:"))
# 合并字符串,保存到一个列表
for page in range(1,in_page+1):
if page<10:
o_page = page%10;
all_num.append(o_page);
elif page<100:
o_page = page % 10;
t_page = page // 10;
all_num.append(t_page);
all_num.append(o_page);
elif page<1000:
o_page = page % 10;
t_page = (page // 10)%10;
h_page = page // 100;
all_num.append(h_page);
all_num.append(t_page);
all_num.append(o_page);
elif page<10000:
o_page = page % 10;
t_page = (page // 10)%10;
h_page = (page // 100)%10;
s_page = page // 1000;
all_num.append(s_page);
all_num.append(h_page);
all_num.append(t_page);
all_num.append(o_page);
else:
print("数据超出上限");
# print(all_num) 输出一下,全是单个数字
# 遍历列表,循环增加
for i in range(9):
record[i] = all_num.count(i);
#print(i,"出现的次数:",record[i]);
file = open('output.txt','a')
file.write(str(record[i]));
file.write("\n");
file.close();
print("程序结束");
课本要求总页码小于10^9,这里仅仅if到10^5,后面换汤不换药了。
欢迎一起交流学习!