用Python解决回文'三角探索'难题

pla*_*etp 8 python palindrome python-3.x

我正在尝试解决这个编程难题:

给出正整数N(0 <N <10).你的任务是打印一个大小为N的回文三角形.

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

1
121
12321
1234321
123454321
Run Code Online (Sandbox Code Playgroud)

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

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

我只能想到'愚蠢'的方式来做到这一点:

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

有更优雅的解决方案吗?

Ale*_*Aza 9

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
Run Code Online (Sandbox Code Playgroud)


pla*_*etp 6

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

for i in range(1, N+1):
    print((111111111//(10**(9-i)))**2)
Run Code Online (Sandbox Code Playgroud)

  • 稍微好一点的方法:`print((10**i // 9)**2)`. (5认同)

ves*_*che 6

for i in range(1,6):
    print (((10 ** i - 1) // 9) ** 2)
Run Code Online (Sandbox Code Playgroud)

这是一个wtf单衬:

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


noo*_*nja 5

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

palindrome(int(input()))
Run Code Online (Sandbox Code Playgroud)
  • 1 * 1 = 1
  • 11 * 11 = 121
  • 111 * 111 = 12321