找出 6 位数字的个数,使得每个数字至少出现两次
我尝试了以下代码,但它不起作用:
count = 0
for n in range(10**5,(10**6)-1):
n = str(n).split()
for i in range(len(n)):
n[i] = int(n[i])
if n.count(i) >= 2:
count+=1
print(count)
最初的问题是排列和组合,但我想使用 python 来解决这个问题......
最佳答案
以下是您的代码中的一些错误 -
- 范围必须为
range(10**5, 10**6)
以涵盖所有 6 位数字 str(n).split()
不会将n
拆分为字符列表,因为数字的字符串表示形式之间没有分隔符。您可以使用[letter for letter in str(n)]
来代替。- 您想要对第一个循环中的每个数字运行第二个循环,因此第二个循环需要位于第一个循环内。
- 在第二个循环中,如果其中一位数字在数字中出现两次以上,您将增加
计数
,因此您最终可能会多次增加单个数字的计数。例如对于112233
,您最终会将count
增加 3,而不是仅增加 1。
这是一个简化的代码,可以以类似的格式执行您想要的操作 -
count = 0
for n in range(10**5, 10**6):
n = [letter for letter in str(n)]
count += 1
for letter in n:
if n.count(letter) < 2:
count -= 1
break
print(count)
输出 -
11754
您可以使用 all()
函数和列表理解来简化代码 -
count = 0
for n in range(10**5, 10**6):
n = [letter for letter in str(n)]
count += all(n.count(letter) >= 2 for letter in n)
关于python - 使用 python 编写一个程序来解决这个问题 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71029526/