解决回文' Triangle Quest' Python中的谜题

时间:2015-12-28 13:16:24

标签: python python-3.x palindrome

我试图解决这个编程难题:

  

给出正整数N(0      

例如,大小为5的回文三角形是:

1
121
12321
1234321
123454321
     

你不能超过两行。你必须完成代码   只使用一个print语句。

     

注意:使用与字符串相关的任何内容都会得分为0.使用   不止一个for-statement会得分为0。

我只能想到愚蠢的'这样做的方法:

for i in range(1, N+1):
    print([0, 1, 121, 12321, 1234321, 123454321, 12345654321, 1234567654321, 123456787654321, 12345678987654321][i])

有更优雅的解决方案吗?

14 个答案:

答案 0 :(得分:5)

我最终做了以下事情(感谢@ raina77ow的想法):

for i in range(1, N+1):
    print((111111111//(10**(9-i)))**2)

答案 1 :(得分:3)

for i in range(1,6):
    print (((10 ** i - 1) // 9) ** 2)

这是一个衬垫:

f=lambda n:n and[f(n-1),print((10**n//9)**2),range(1,n+1)];f(5)

答案 2 :(得分:2)

def palindrome(N):
    for i in range(1, N + 1):
        print(int('1' * i)**2)

palindrome(int(input()))
  • 1 * 1 = 1
  • 11 * 11 = 121
  • 111 * 111 = 12321

答案 3 :(得分:1)

打码打高尔夫并接受西蒙和雨的建议:

set(map(lambda x:print((10**x//9)**2),range(1,N+1)))

答案 4 :(得分:1)

for i in range(1,int(input())+1):
   print(int((10**i-1)/9)**2)

1 -> (   10 - 1) / 9 =    1,    1 *    1 = 1
2 -> (  100 - 1) / 9 =   11,   11 *   11 = 121
3 -> ( 1000 - 1) / 9 =  111,  111 *  111 = 12321
4 -> (10000 - 1) / 9 = 1111, 1111 * 1111 = 1234321

答案 5 :(得分:1)

我认为以下代码应该有效。我使用了最基本的方法,以便大多数人都可以理解它:

  N = int(input())
  arr = []
  for i in range(1,N+1):
         arr.append(i)
         print(arr+arr[-2: :-1])

答案 6 :(得分:1)

Date

答案 7 :(得分:1)

这是一个简单的无字符串版本:

for i in range(1, int(input()) + 1):
    print(sum(list(map(lambda x: 10 ** x, range(i)))) ** 2)

答案 8 :(得分:0)

for i in range(1, N + 1):
    print(*list(range(1, i + 1)) + list(range(i - 1, 0, -1)), sep = None)

答案 9 :(得分:0)

因为到目前为止提供的每个解决方案都涉及range(),我认为它在Python代码中被过度使用:

from math import log10

i = 1
while (N > log10(i)): print(i**2); i = i * 10 + 1

答案 10 :(得分:0)

我可以使用下面的列表格式打印:

    for i in range(1,5):
        print [j for j in range(1,i+1) ], [j for j in range(i-1,0,-1) ]

结果:

[1] []

[1,2] [1]

[1,2,3] [2,1]

[1,2,3,4] [3,2,1]

[1,2,3,4,5] [4,3,2,1]

答案 11 :(得分:0)

    for i in range(2,int(raw_input())+2): 
        print ''.join(([unicode(k) for k in range(1,i)]))+""+''.join(([unicode(k) for k in range(i-2,0,-1)]))
        print ''.join(map(unicode,range(1,i)))+""+''.join(map(unicode,range(i-2,0,-1)))

我希望它会有所帮助。

答案 12 :(得分:0)

for i in range(1,int(input())+1):
    print(int(str('1'*i))**2)

基本上在每次迭代中,字符串中的数字“ 1”都将乘以i倍,然后转换为整数,然后平方。例如

在第三次迭代中->输出= 111 ^ 2 = 12321

编辑:值得注意的约束条件是使用str()函数

所以我们有一个序列1,11,111,1111 nth = an +(a(r ^(n-1)-1))/(r-1),其中| r> 1 |

因此,解决方案;

for i in range(1,int(input())+1):
    print(pow((((10**i - 10))//9) + 1, 2))

答案 13 :(得分:-1)

使用此代码:

$ mongodump -u adm_dump --authenticationDatabase admin --dumpDbUsersAndRoles -o /opt/backup/mongodump_db_test