题目大意
如果x加上x的各个数字的和得到y,就说x是y的生成元。给出n(1 <= n <= 100000),求最小生成元。无解输出0。
解题思路
假设所求生成元为m,首先最简单的思路是使n从0枚举找到m的最小生成元,但很可惜本题会超时,此时我们自然就会想到打表的做法,只要从0到100000枚举每一个数n,把n当作某个数的最小生成元即可。
AC代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 100010;
int f[N];
int main(void)
{
for(int i = 0; i <= 100000; i++)
{
int x = i, sum = i;
while(x)
{
sum += x % 10;
x /= 10;
}
if(f[sum] == 0) f[sum] = i;
}
int n;
scanf("%d", &n);
while(n--)
{
int t;
scanf("%d", &t);
cout << f[t] << endl;
}
return 0;
}