链接:
https://codeforces.com/problemset/problem/1355/A
题意:
根据给定关系式 *a_{n+1} = a_{n} + minDigit(a_{n}) maxDigit(a_{n}).
其中minDigit(x)和maxDigit(x)的十进制表示的各位数字中的最小和最大数字。
输入
8
1 4
487 1
487 2
487 3
487 4
487 5
487 6
487 7
输出量
42
487
519
528
544
564
588
628
解:
题目带有暴力标签,观察关系式,猜测K足够大时,多次计算后minDigit(a_{n}) *maxDigit(a_{n})将会存在规律,测试几组数据后发现,会出现minDigit(x)等于0即十进制表现中有一位为0的情况,导致minDigit(a_{n}) *maxDigit(a_{n})出现定值0,即在minDigit(x)不等于0前暴力循环,minDigit(x)等于0时处理脱离循环。
实际代码:
#include<iostream>
using namespace std;
typedef long long int ll;
int Max(ll a)
{
int ans=0;
for(;a!=0;)
{
int temp=a%10;
if(temp>ans)
{
ans=temp;
}
a/=10;
}
return ans;
}
int Min(ll a)
{
int ans=9;
for(;a!=0;)
{
int temp=a%10;
if(temp<ans)
{
ans=temp;
}
a/=10;
}
return ans;
}
int main()
{
int T;
cin>>T;
for(int f=1;f<=T;f++)
{
ll a,k;
cin>>a>>k;
for(int i=2;i<=k;i++)
{
a=a+Max(a)*Min(a);
if(Min(a)==0) break;
//cout<<a<<endl;
}
cout<<a<<endl;
}
}
限制:
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output