描述
一个四位数,各位数字互不相同,所有数字之和等于6,并且这个数是11的倍数。
满足这种要求的四位数有多少个?各是什么?
输入格式
该题目没有输入
输出格式
第一行输出符合条件的数字个数
第二行以列表形式输出所有满足条件的四位数,列表元素按由小到大顺序排列
各位数字互不相同
len(set(str(num))) == 4 # 将数中的数字放入集合后,若集合长度为4则无重复数字
这个数是11的倍数
num % 11 == 0 # 是11的倍数,即能被11整除,或者说对11取模的结果为0
所有数字之和等于6
sum(map(int,str(num))) == 6
# 用str()将数字映射为字符串,再用map()将字符串中的字任映射为整数
# 用sum()函数对映射为整数的序列中的元素求和
参考代码:
ls = []
for num in range(1000,3211): #各位数加和为6的最大的数是3210
if num % 11 == 0 and sum(map(int,str(num))) == 6 and len(set(str(num))) == 4:
ls.append(num)
print(len(ls))
print(ls)
下面给出用列表推导式完成的代码,帮助理解推导式的应用
ls = [num for num in range(1000,3211)if num % 11 == 0 and sum(map(int,str(num))) == 6 and len(set(str(num))) == 4] #各位数加和为6的最大的数是3210
print(len(ls))
print(ls)
下面给出用函数完成的代码,设置默认值参数,使程序具有通用性
def result(n=4, s=6, b=11): # 参数缺省时计算和为6,11 倍数的4 位数
ls = []
for i in range(10 ** (n - 1), 10 ** n):
sumi = sum(map(int, str(i)))
if i % b == 0 and sumi == s and len(set(str(i))) == n:
ls.append(i) # 符合条件的数字加到列表ls 里
return len(ls), ls # 返回符合条件的数的个数和数的列表
if __name__ == '__main__':
print(*result()) # 无参数时计算和为6,11 倍数的4 位数
num, sumOfn, base = map(int, input().split()) # 空格分隔3 个整数
print(*result(num, sumOfn, base)) # 计算和为s,num 倍数的n 位数