我和Hackerrank一起玩,遇到了this problem。
写成:
您将获得正整数N.您必须打印数字 高度为N-1的三角形如下图所示:
1
22
333
4444
55555
......
我的直接想法是这个解决方案:
for i in range(1,input()):
print(str(i)*i)
将给定的(5)输出作为第一行输入:
1
22
333
4444
提交说这不对。其他被接受的建议在我看来并不那么优雅:
for i in range(1,int(input())):
print((10**i)//9*i)
输出:
1
22
333
4444
输出相同但代码很难看。为什么这个解决方案可以接受而不是我的?
答案 0 :(得分:4)
你遗漏了描述中的内容:
注意使用与字符串相关的任何内容都会得分为0。
您在解决方案中使用str()
,因此根据挑战规则无效。重点是通过计算数字而不是从字符串构建它来找到这个技巧。
我用过:
for i in range(1,int(input())):
print(i * (10 ** i - 1) // 9)
通过挑战,这基本上是相同的方法。你利用10 // 9是1,100 // 9是11,1000 // 9是111等的事实;获得足够的零以生成正确的位数,并将重复的1
数字与i
相乘,以获得多个重复的i
位数。