输入一个数,输出其最小生成元。刚开始看时一脸懵逼,想要对于给定的每一个数倒着找,但是那样没法写。
字数上用的打表,最终查表直接输出即可,一定要学会这种方法,有时能够很有效的避免TLE并且很简洁。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define maxn 100001
int main()
{
int a[maxn],k,t;
memset(a,0,sizeof(a));
for(int i = 1;i < maxn;i++)//最好的方法:一次性枚举,最后查表即可;
{
int m = i,n = i;
while(n)
{
m += n%10;
n /= 10;
}
if(a[m] == 0 || i < a[m])
a[m] = i;//a[m] != m 别搞反;
}
scanf("%d",&t);
while(t--)
{
scanf("%d",&k);
printf("%d\n",a[k]);
}
return 0;
}