定义一个名为nested_increasing_additions(n)
的函数,它接收一个正整数(n)
而返回一个字符串,如以下示例所示:
如果n
为3
,则函数应返回字符串:
1+..1+2+..1+2+3+..
如果n
为5
,则函数应返回字符串:
1+..1+2+..1+2+3+..1+2+3+4+..1+2+3+4+5..+
我认为,我可以将n
设为列表[1,2,3]
并使用while循环或for循环重复n
次。对于第一个循环,它返回1+..
,对于第二个循环,它以某种方式返回1+2..
(我不知道)它在2
停止,这与重复时间相同。 / p>
我不知道我是否认为是对的。需要一些帮助和解释!谢谢!
答案 0 :(得分:4)
对这些字符串的连续评估会产生一系列四面体数。例如,对于输入5,输出的计算结果为35.这是构建边长为5的四面体所需的球体数。
要了解它与问题中总和的关系,请注意四面体的离散“体积”将等于从上到下的三角形“切片”的总和。
def tetrahedral(n):
return n*(n+1)*(n+2)//6
def string_generator(n):
x = tetrahedral(n)
n = N = 1
while x > 0:
while n <= N:
yield str(n) + '+'
n += 1
x -= N*(N+1)//2
n = 1
N += 1
yield '..'
def nested_increasing_additions(n):
return ''.join(string_generator(n))
通过类似的论证,三角形数字由连续整数的切片组成。
请原谅数学,很难(但并非不可能)将封闭形式的解决方案调整为所需的输出格式。
@Injectable()
export class DeezerService{
constructor(private _jsonp:Jsonp){
}
dzSearch(){
console.log('Testing dzSearch() init');
return this._jsonp.request('https://api.deezer.com/search/artist/?q=deftones&output=jsonp', {method:'Get'})
.subscribe((res) => {
console.log(res);
});
}
}
答案 1 :(得分:1)
您可以逐步构建完整的字符串,并记住每个步骤最后添加的内容:
def nested_increasing_additions(n):
complete_string = ""
add_string = ""
for i in range(1,n+1):
add_string += str(i) + "+"
complete_string += add_string + ".."
return complete_string
print(nested_increasing_additions(1))
print(nested_increasing_additions(3))
print(nested_increasing_additions(5))
python3的输出是:
1+..
1+..1+2+..1+2+3+..
1+..1+2+..1+2+3+..1+2+3+4+..1+2+3+4+5+..
答案 2 :(得分:0)
def nested_increasing_additions(n):
l=['']
for i in range(1, n+1):
l.append(l[-1]+str(i)+'+')
return '..'.join(l[1:])
这将返回末尾没有..
的字符串。如果您需要,请执行return '..'.join(l[1:]) + '..'
答案 3 :(得分:0)
你可以使用这样的东西。
def nested_increasing_additions(n):
string = ""
for i in range(1,n+1): #1
for j in range(1,i+1): #2
string += str(j)+"+" #4
string += ".." #5
print(string)
这是nested_increasing_additions的打印输出(4) 1 + .. 1 + 2 + ... 1 + 2 + 3 + 1 .. + 2 + 3 + 4 + .. 我认为它是自我解释的,没有什么复杂的。
答案 4 :(得分:0)
假设您确实希望每个返回字符串末尾的".."
并且递归正常,这是一个解决方案:
def nested_increasing_additions(n):
if n == 1:
return "1+.."
else:
return nested_increasing_additions(n-1) + '%s+..' % '+'.join(str(i) for i in range(1, n+1))
print(nested_increasing_additions(3))
print(nested_increasing_additions(5))
type(nested_increasing_additions(1))
<强>打印强>:
1+..1+2+..1+2+3+..
1+..1+2+..1+2+3+..1+2+3+4+..1+2+3+4+5+..
<type 'str'>
的说明强>:
n
减1并且当前迭代的字符串构建(如果n!=1
)。'%s+..' % '+'.join(str(i) for i in range(1, n+1))
只是range
函数生成的数字列表的串联,转换为字符串和"+.."
range(1, n+1)
会返回一个以1开头的整数列表,直到n+1
,range(1,3)
会产生[1,2]
。这将传递给join,在每个数字之间放置一个+
。答案 5 :(得分:0)
这是怎么回事:
def nested_increasing_additions(n):
string = ""
new_string = ""
dot = ".."
for i in range(1, n+1):
new_string+=('{}+'.format(i))
string = string+new_string+dot
print(string)
return (string)
输出:
nested_increasing_additions(3)
'1+..1+2+..1+2+3+..'