運動計画:古いウニはスポーツが大好きな人で、毎日小さなウニが一緒に運動します。運動をより効果的にするために、彼は、n日目のトレーニング量がn番目の正の回文数(最初の正の回文数は1)と等しくなるように運動計画を作成したいと考えています...

タイトル説明

古いウニはスポーツが大好きな人で、毎日小さなウニが一緒に運動しに来ます。運動をより効果的にするために、彼は、n日目のトレーニング量がn番目の正の回文数(最初の正の回文数は1)と等しくなるように運動計画を作成したいと考えています。古いウニはすでにスケジュールを印刷していますが、スケジュールの一部が欠落していて、再計算したくないので、この問題の解決を手伝ってくれませんか。
数の桁が逆に並べられた後もそれ自体と等しい場合、そのような数は回文数と呼ばれます。たとえば、12321は回文数であり、1232は回文数ではありません。

入力データ

最初の行には整数t(1≤t≤100000)があります。これは、データのグループがt個あることを意味します。データの各グループには、n日を表す整数n(1≤n≤400000)の行が1つだけあります。

出力データ

データの各セットについて、対応するトレーニング量を示す整数が出力されます。

サンプル入力

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