问题是:
Write a program, which will find all such numbers between m and n (both included) such that each digit of the number is an even number.
Input Format:
The first line contains value m and n separated by a comma.Output Format:
The numbers obtained should be printed in a comma-separated sequence on a single line.Constraints:
1000<=m<=9000
1000<=n<=9000
但是,我的代码仅在百位和千位不存在奇数时才有效。我哪里错了?测试用例和预期结果:
测试用例 1
- 输入:2000,2020
- 产量:2000,2002,2004,2006,2008,2020
测试用例 2
- 输入:2000,2050
- 输出:2000,2002,2004,2006,2008,2020,2022,2024,2026,2028,2040,2042,2044,2046,2048
测试用例 3
- 输入:1000,2000
- 输出:2000
测试用例 3 在我的案例中失败了。为什么会这样?
num=list(map(int,input().split(",")))
length=len(num)
list=[]
first=num[0]
last=num[length-1]
for i in range(first,last+1):
count=0
num1 = i
k=i
for j in range(4):
last_digit=k%10
k=i//10
if(last_digit%2==0):
count=count+1
if(count==4):
list.append(num1)
length2=len(list)
for i in range(length2):
if(i<length2-1):
print(list[i],end=',')
else:
print(list[i])
最佳答案
你的错误在于:
k=i
for j in range(4):
last_digit=k%10
k=i//10
您在每次迭代中将 i//10
分配给 k
,并且 i
永远不会改变,因此您总是只查看最后两个数字,别无其他。如果i
从1234
开始,那么k
从1234
开始,last_digit
变为4
和 k
变为 123
。从那里开始,您只看 123
(last_digit
将是 3
和 k = i//10
所以再次 123
,每次迭代)。
你需要划分k
:
k=i
for j in range(4):
last_digit=k%10
k=k//10
一个更简单的方法是将数字(字符串值)与偶数集进行比较:
even = set('02468')
results = []
for i in range(first, last + 1):
if set(str(i)) <= even: # only even digits used
results.append(i)
关于python - 代码不适用于十位和百位的奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52835933/