|
发表于 2017-5-23 16:35:49
|
显示全部楼层
- # -*- coding=utf-8 -*-
- #!/usr/bin/python3.4
- def not_jump_num_advance(length):
- """
- 统计10^length内有多少数不是跳跃数
- """
- if length == 1:
- num_dic = {"equal": list(1 for _ in range(0,10)), "more":[], "less":[]} #一位数均为跳跃数
- count = 9
- elif length == 2:
- num_dic = {"equal": list(0 for _ in range(0,10)), "more": list(0 for _ in range(0,10)), "less": list(0 for _ in range(0,10))} #两位数同理
-
- #num_dic字典有三个键equal, more, less,分别表示从个位向高位依次相等、递增、递减的情况
- #以num_dic["more"]为例:num_dic["more"][3]表示以数字3开头且从个位向高位依次递增的数的个数,最高位为0的情况也统计,但是不计入总数目
-
- for i in range(0,100):
- s = str(i)
- if len(s) < 2:
- s = "0" + s
- if int(s[1]) < int(s[0]):
- num_dic["more"][int(s[0])] += 1
- elif int(s[1]) > int(s[0]):
- num_dic["less"][int(s[0])] += 1
- else:
- num_dic["equal"][int(s[0])] += 1
- count = 99
- else:
- pre_num_dic, pre_count = not_jump_num_advance(length - 1) #递归获取10^(length-1)之内的统计情况
- equal_list = list(0 for _ in range(0,10)) #初始化各列表
- more_list = list(0 for _ in range(0,10))
- less_list = list(0 for _ in range(0,10))
-
- pre_equal_list = pre_num_dic["equal"]
- pre_more_list = pre_num_dic["more"]
- pre_less_list = pre_num_dic["less"]
-
- for i, c in enumerate(pre_equal_list):
- for x in range(10): #x表示在length-1位的数字最前面添加x构造length位的数字
- if x > i:
- more_list[x] += c
- elif x < i:
- less_list[x] += c
- else:
- equal_list[x] += c
-
- for i, c in enumerate(pre_more_list):
- for x in range(i, 10):
- more_list[x] += c
-
- for i, c in enumerate(pre_less_list):
- for x in range(0, i+1):
- less_list[x] += c
-
- num_dic = {"equal": equal_list, "more": more_list, "less": less_list}
- count = pre_count + \
- sum(equal_list[1:]) + \
- sum(more_list[1:]) + \
- sum(less_list[1:]) #对于最高位为0的数字不计入总数
- return num_dic, count
- if __name__ == "__main__":
- length_1 = 6
- length_2 = 10
- length_3 = 100
-
- print("googol(10^6):", not_jump_num_advance(length_1)[1])
- print("googol(10^10):", not_jump_num_advance(length_2)[1])
- print("googol(10^100):", not_jump_num_advance(length_3)[1])
复制代码
答案:51161058134250 |
评分
-
查看全部评分
|