Codeforces 1355A - Sequence wit

2020-06-16  本文已影响0人  费城的二鹏

日常一道算法题。

翻译

序列与位

定义以下循环:

a[n+1] = a[n] + minDigit(a[n]) * maxDigit(a[n])

这里最大位和最小位就是字面意思,所有位中最大位和最小位的值。

你的任务就是根据给的 a[1] 和 K 计算出 a[K]。

输入格式

输入整数 t 表示测试用例组数。

每个测试用例,输入单行两个数字 a[1] K 用空格分隔

输出格式

每行输出 a[K]。

分析

想了半天,以为是什么数论的知识,结果也没找到规律。

突然灵感一动想到了,如果最低位是0,那么无论 K 剩余多少,就是当前数字了。但是多少次计算后,会是 0,我没有证明。

也就是依据输入值循环计算,当最低位是 0 时,直接输出答案即可。

代码(Python3)

# https://codeforces.com/problemset/problem/1355/A
 
import sys
import os
import heapq
import math
 
try:
    path = "./file/input.txt"
    if os.path.exists(path):
        sys.stdin = open(path, 'r')
    # sys.stdout = open(r"./file/output.txt", 'w')
except:
    pass
 
t = int(input())
 
def printd(value):
    # print(value)
    pass
 
def case():
    arr = list(map(int, input().split(" ")))
    a, k = arr[0], arr[1]
    for index in range(k - 1):
        mindigit = 9
        maxdigit = 0
        number = a
        while number > 0:
            digit = number % 10
            number //= 10
            maxdigit = max(maxdigit, digit)
            mindigit = min(mindigit, digit)
        
        if mindigit == 0:
            break
            
        a += maxdigit * mindigit
    
    print(a)

for _ in range(t):
    case()

更多代码尽在 https://github.com/Tconan99/Codeforces

by 费城的二鹏 2020.06.14 长春

上一篇 下一篇

猜你喜欢

热点阅读