生成元(Digit Generator)(打表)

如果X加上x的各位数字之和得到y,就说x是y的生成元。给出n(1<=n<=100000),求最小生成元。无解输出0。例如n=216,121,2005时的解分别为198,0,1979.

//分析:只需要一次性枚举100000以内的所有正整数m,进行标记,最后查表即可
#include<stdio.h>
#include<string.h>
#define maxn 100005
int ans[maxn];
int main()
{
    int t,n;
    memset(ans,0,sizeof(ans));
    for(int m=1;m<maxn;m++)
    {
  	int x=m,y=m;
  	while(x>0)
  	{
            y+=x%10;
            x/=10;
  	}
  	if(ans[y]==0||m<ans[y])
  	{
            ans[y]=m;
  	}
    }
    scanf("%d",&t);
    {
  	while(t--)
  	{
            scanf("%d",&n);
            printf("%d\n",ans[n]);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/huangziguang/article/details/107772620