竞争编程Python:重复数字和错误
我不知道该不该问这个问题。但我感觉完全被卡住了。找不到更好的解决方法 我是竞争性编程的新手。我在解决重复的数字和问题竞争编程Python:重复数字和错误,python,Python,我不知道该不该问这个问题。但我感觉完全被卡住了。找不到更好的解决方法 我是竞争性编程的新手。我在解决重复的数字和问题 给定一个整数N,递归地求N的和,直到得到一个位数。 例如:- Input: 2 123 9999 Output:- 6 9 这是我的密码:- def sum(inp): if type(inp) == int: if len(str(inp)) <= 1: return inp else:
给定一个整数N,递归地求N的和,直到得到一个位数。
例如:-
Input:
2
123
9999
Output:-
6
9
这是我的密码:-
def sum(inp):
if type(inp) == int:
if len(str(inp)) <= 1:
return inp
else:
a = list(str(inp))
while len(a) > 1:
b = 0
for i in a:
b+= int(i)
a = list(str(b))
return b
t = int(raw_input())
for i in range(0,t):
print sum(i)
然而,当我使用42
亲自测试代码时,它完美地为我提供了正确的输出6
下面是问题的链接:-您没有正确实现代码。您正在迭代
i
从0
到t
。为什么?方法如下:
N=12345
计算数字之和(1+2+3+4+5=15)
检查是否小于10。如果是,那么当前的总和就是答案。。如果不是。。按照相同的步骤设置N=15
代码如下:
def sum(inp):
while inp > 9:
num = inp
s = 0
while num > 0:
s = s + num%10
num = num/10
inp = s
return inp
t = int(raw_input())
for i in range(t):
n = int(raw_input())
print sum(n)
Edit:我认为您正在迭代到t
,因为您已经将t
视为测试用例的数量。因此,在for
循环中,您应该为每个测试用例的N
获取另一个输入。[这是基于您在问题中提供的输入
和输出
)
编辑-2:我对代码做了一些更改。这个问题要求我们找出
t
数的重复和。为此,我添加了一个循环,我们在其中输入一个与每个测试用例对应的数字n
,并找到它的重复和。您的函数不应该命名为digSum()
?顺便说一句:定义与内置方法同名的函数可能会引起一些混乱。例如,在Python中,您应该避免为事物命名sum
。现在,相同代码的错误发生了更改第17行:TypeError:“int”对象不可编辑
这怎么可能呢?请发布您更新的代码。我运行了你的旧版本,我认为它运行得很好。FWIW,有一种简单的非递归方法来执行此计算。如果n
是输入的数字,那么它实际上是n%9或n和9,这是我的第一个问题。因此,我在理解测试用例t
和n
时遇到了一些困难。如果你能进一步解释,那将非常有帮助。谢谢提供的链接中的问题是,他们将提供一个数字作为N
作为输入,您必须找到N
的重复数字和。根据您的解决方案,您获取输入并将其存储在t
[没问题]。然后从0
迭代到t
,并找到从0
到t
的所有数字的重复总和。在我的解中,我只找到了t
的重复和。希望你收到了。有些问题他们会给出t
,对于每个t
,他们会提供一个数字N
,以找到重复的总和。但您的问题并非如此您的输出产生的行数比预期的少。!!!可能您缺少新行字符。
@SanatanChaudhary:请立即试用代码。做了一个编辑(Edit2)。非常感谢它能工作,但我不明白为什么我们必须这样做测试用例。
def sum(inp):
while inp > 9:
num = inp
s = 0
while num > 0:
s = s + num%10
num = num/10
inp = s
return inp
t = int(raw_input())
for i in range(t):
n = int(raw_input())
print sum(n)