描述
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 请编程输出当年维纳的年龄。
输入格式
该题目没有输入
输出格式
一个正整数(维纳当年的年龄)
年龄的立方是个4位数
计算年龄的3次幂,结果转为字符串后长度应为4
len(str(age ** 3)) == 4
我年龄的4次方是个6位数
计算年龄的4次幂,结果转为字符串后长度应为6
len(str(age ** 4)) == 6
这10个数字正好包含了从0到9这10个数字
set(str(age ** 3))|set(str(age ** 4)) == set(map(str,range(10)))
# 或
set(str(age ** 3))|set(str(age ** 4)) == {'0','1','2','3','4','5','6','7','8','9'}
# 或
set(str(age ** 3)).union(str(age ** 4)) == {'0','1','2','3','4','5','6','7','8','9'}
每个都恰好出现1次
因为两个字符串共有10个数字,若满足前一个条件,则已经满足每个数都只出现一次的要求了,此条可以不再单独判定。
完整参考代码如下:
def ageJudge():
for age in range(100):
if len(str(age ** 3)) == 4 and len(str(age ** 4)) == 6:
if set(str(age ** 3))|set(str(age ** 4)) == set(map(str,range(10))):
return age
if __name__ == '__main__':
print(ageJudge()) # 调用函数,输出结果
实际上,我们知道30 3 = 27000,已经超过9999,是5位数,而10 3=1000,正好是第一个4位数,所以遍历范围可以缩小:
def ageJudge():
for age in range(10,30):
if (len(str(age ** 3)) == 4 and len(str(age ** 4)) == 6
and set(str(age ** 3))|set(str(age ** 4)) == set(map(str,range(10)))):
return age
if __name__ == '__main__':
print(ageJudge()) # 调用函数,输出结果