展开全部
以下代2113码 python 2/3 通用。#!/usr/bin/env python3
# coding=utf-8
"""http://zhidao.baidu.com/question/1450087966622218540.html
编写一个程序寻找一种特殊整5261数:一个n位的正整4102数等于其各位数1653字的n次方之和。例如:
407=4^3+0^3+7^3,所以407就是一个符合要求的特殊整数。
输入:正整数的位数n(n<=6)。
输出:所有符合要求的n位特殊数。若不存在符合条件的特殊数,则输出提示:“No output.”;若存在,则从小到大进行输出,每个数占一行。
"""
from __future__ import division, print_function, unicode_literals
import itertools
def get_int(digits, n):
return sum(i ** n for i in digits)
def test_get_int():
assert get_int((4, 0, 7), 3) == 407
assert get_int((4, 2, 7), 3) == 407 + 8
def digits_match(this_int, digits):
return sorted(str(this_int)) == sorted(''.join(map(str, digits)))
def test_digits_match():
assert digits_match(123, (1, 2, 3))
assert digits_match(123, (2, 1, 3))
assert digits_match(102, (1, 0, 2))
assert digits_match(112, (1, 1, 2))
assert digits_match(112, (1, 2, 1))
assert not digits_match(120, (1, 2, 1))
assert not digits_match(120, (1, 2))
def find_ints(n):
result = []
for c in itertools.combinations_with_replacement(range(10), n):
this_int = get_int(c, n)
if digits_match(this_int, c):
result.append(this_int)
result.sort()
return result
def main():
n = int(input())
results = find_ints(n)
if results:
for i in results:
print(i)
else:
print("No output.")
if __name__ == '__main__':
main()
执行效果:$ python3 find_ints_power_of_all_digits.py
1
0
1
2
3
4
5
6
7
8
9
$ python3 find_ints_power_of_all_digits.py
2
No output.
$ python3 find_ints_power_of_all_digits.py
3
153
370
371
407
$ python3 find_ints_power_of_all_digits.py
4
1634
8208
9474
$ python3 find_ints_power_of_all_digits.py
5
54748
92727
93084
$ python3 find_ints_power_of_all_digits.py
6
548834