A.数字付きシーケンス(思维)

A.数字付きシーケンス

公式:an + 1 = an + min D igit(an)⋅max D igit(an)a_ {n + 1} = a_n + minDigit(a_n)⋅maxDigit(a_n)aN + 1=an個+m i n D i g i t an個m a x D i g i t an個
含义:min D igit(an)、an minDigit(a_n)、a_nm i n D i g i t an個an個各小数点以下の最小値。max D igit(an)、maxDigit(a_n)、a_nm a x D i g i t an個an個各小数点以下の最大値。
例:数値83901の最小桁(an)= 0、最大桁(an)= 9 minDigit(a_n)= 0、maxDigit(a_n)= 9m i n D i g i t an個=0 m a x D i g i t an個=9

タイトルの意味:1、k a_1、kを与えるa1Kは式ak a_kに従って計算されますaK

アイデア:最小桁(an)= = 0の場合minDigit(a_n)= = 0m i n D i g i t 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