Lanqiaoカップの基本的な演習のための特別なpalindrome番号(pythonで実装)

リソース制限
時間制限:1.0秒メモリ制限:512.0MB

問題の説明
123321は非常に特殊な番号であり、左からの読み取りと右からの読み取りは同じです。
正の整数nを入力し、各桁の合計がnに等しくなるように、そのような5桁および6桁の10進数をすべて検索するようにプログラムします。

入力形式
正の整数nを含む1行を入力します小さいものから大きいものの順序に従った
  
出力フォーマットは、条件を満たす整数を出力します。各整数は1行あたりです。サンプル入力52

  

サンプル出力
899998
989989
998899

データスケールと規則
1 <= n <= 54


初めて提出されたコード:

# 遍历所有五位数和六位数,
# 求各位数字之和判断是否等于n,
# 接着将数字转成字符串再逆转然后判断是否为回文数
n = int(input())
for i in range(10000,1000000) :
    num = str(i)
    result = 0
    for j in num :
        result += int(j)
    if result == n and num == num[::-1] :
        print(num)

結果:重大なタイムアウト!分析の結果、中央に2つのループがあり、合計もループであり、「特殊パリンドローム番号」以外の番号についても合計操作が行われ、多くの無効な操作が行われています。


2回目に提出されたコード:

# 先判断是回文数,再求和
n = int(input())
for i in range(10000,1000000) :
    num = str(i)
    if num == num[::-1] :
        result = 0
        for j in num :
            result += int(j)
        if result == n :
            print(num)

結果:満点!しかし、それは390msかかりました


提出された3番目のコード:

n = int(input())
my_list = []
for i in range(100,1000) :
	# 如果该数字是6位数
    if sum(map(int,str(i) + str(i)[::-1])) == n :
        my_list.append(str(i) + str(i)[::-1])
        
    # 如果该数字是5位数
    if sum(map(int,str(i) + str(i)[:2][::-1])) == n :
        my_list.append(str(i) + str(i)[:2][::-1])
for i in sorted(map(int,my_list)) : # 排序
    print(i)

結果:満点!31msかかります。対称処理により、多くの操作が削減されます。

おすすめ

転載: blog.csdn.net/weixin_43974265/article/details/104864741
おすすめ