青岛微网站开发,拓者设计室内设计网,建立大型网站流程,wordpress没有编辑器题目
给定一个n(n50)#xff0c;记f(x)是x各数位的加和#xff0c;例如f(331)3317
要求输出一个x()#xff0c;且对于任意i∈[1,n]#xff0c;均有成立
思路来源
jiangly B站讲解
题解
首先n没啥用#xff0c;构造一个n50成立的case即可#xff0c;
给定一个x…题目
给定一个n(n50)记f(x)是x各数位的加和例如f(331)3317
要求输出一个x()且对于任意i∈[1,n]均有成立
思路来源
jiangly B站讲解
题解
首先n没啥用构造一个n50成立的case即可
给定一个x将x乘以2后数位和变小乘以50次都变小 考虑变小怎么做逆向考虑
假设终态是10000若干个0如果*210000变小
前一项就是5000这样不断除以225001250...
发现前面若干项是变小的中间也有变大的
乘以若干个2得到最后的10000那么原始就是不带2的也就是5的j次方
构造5的j次方每个*2的时候都会变小几次然后变大一次整体趋势变小偶有变大
拼接到一起就能抵消这个偶有变大的情况只要整体趋势是变小多变大少
打表发现拼接5的1次方到5的100次方即可总长度也没有超限
也可以中间补0让各段独立不过删掉0发现也没有违反性质 Bonus
考虑变大怎么做
手玩发现9的时候会变大如9183672144288
144-288会变大具体打表可以后面虽然有变小的时候但整体的趋势是变大
拼接91836这些数即可例如9000000001800000036...
只要整体趋势是变大多变小少
且拼接的足够长那么整体趋势一定是变大
代码
# def f(n):
# s str(n)
# ans 0
# for c in s:
# ans ord(c) - ord(0)
# return anss
for i in range(100):v 5 ** is str(v)
n int(s)
print(n)
# for i in range(51):
# print(fi:{i} f:{f(n)})
# n*2