锻炼计划:老顽童是一个热爱运动的人,每天都有小顽童来和他一起锻炼。为了让锻炼更有成效,他想要制定一份锻炼计划,让第 n 天的训练量要等于第 n 个正回文数 ( 第 1 个正回文数是 1)...

题面描述

老顽童是一个热爱运动的人,每天都有小顽童来和他一起锻炼。为了让锻炼更有成效,他想要制定一份锻炼计划,让第 n 天的训练量要等于第 n 个正回文数 ( 第 1 个正回文数是 1) 。老顽童已经打印好了计划表,但是他的计划表中有一些日子被遗漏了,他又不想重新计算,你可以帮他解决这个问题吗?
如果一个数的各位数字反向排列后仍然等于其本身,则把这样的数称为回文数 (palindrome number) ,如 12321 是回文数, 1232 不是回文数。

输入数据

第一行有一个整数 t (1 ≤ t ≤ 100000) ,表示有 t 组数据。每组数据只有一行,为一个整数 n (1 ≤ n ≤ 400000) ,表示第 n 天。

输出数据

对于每组数据,输出一个整数,表示对应的训练量。

样例输入

5
1
2
3
12
23

样例输出

1
2
3
33
141

心得:不知道怎么用程序表示规律,参考网上C++代码改的

def daBiao(n):    
    result = ''    
    s = 9    
    ans = 1
    
    # 判断第n个数有多少位,原理等同于打表求值    
    while n > s * 2:        
        n -= s * 2        
        s *= 10        
        ans *= 10     
    ans += (s if n%s==0 else n%s)-1    
    result = str(ans)   # 前半部分
    
    # n个位数为奇数,去掉最后一位    
    if n - s <= 0:        
        ans = int(ans/10)    
    while(ans):        
        result += str(ans % 10) #后半部分        
        ans = int(ans/10)    
    print(result)
    
T = int(input())  
for t in range(T):    
    n = int(input())    
    daBiao(n)

猜你喜欢

转载自blog.csdn.net/tianxiefenxiang/article/details/107613732