A. Sequence with Digits(思维)

A. Sequence with Digits

公式: a n + 1 = a n + m i n D i g i t ( a n ) ⋅ m a x D i g i t ( a n ) a_{n+1}=a_n+minDigit(a_n)⋅maxDigit(a_n) an+1=an+minDigit(an)maxDigit(an)
含义: m i n D i g i t ( a n ) , a n minDigit(a_n),a_n minDigit(an)an的每个十进制位置上的最小值。 m a x D i g i t ( a n ) , a n maxDigit(a_n),a_n maxDigit(an)an的每个十进制位置上的最大值。
举例:数83901的 m i n D i g i t ( a n ) = 0 , m a x D i g i t ( a n ) = 9 minDigit(a_n) = 0,maxDigit(a_n) = 9 minDigit(an)=0maxDigit(an)=9

题意:给出 a 1 , k a_1,k a1k根据公式求 a k a_k ak

思路:当 m i n D i g i t ( a n ) = = 0 minDigit(a_n) = =0 minDigit(an)==0时,整个数将不再改变。就可以直接输出答案。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll Max(ll x) {
    
    
	ll mx = x%10;
	x /= 10;
	while(x) mx = max(x%10, mx), x /= 10;
	return mx;
}
ll Min(ll x) {
    
    
	ll mi = x%10;
	x /= 10;
	while(x) mi = min(x%10, mi), x /= 10;
	return mi;
}

int main() {
    
    
	int t;
	scanf("%d", &t);
	while(t--) {
    
    
		ll n, m, x, y;
		scanf("%lld%lld", &n, &m);
		for(int i=1; i<m; i++) {
    
    
			x = Max(n), y = Min(n);
			if(y == 0) break;
			n = n + x*y;
		}
		printf("%lld\n", n);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45363113/article/details/106877877